aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/providers
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/providers')
-rwxr-xr-xframework/src/onos/providers/bgp/app/app.xml25
-rwxr-xr-xframework/src/onos/providers/bgp/app/features.xml26
-rwxr-xr-xframework/src/onos/providers/bgp/app/pom.xml52
-rwxr-xr-xframework/src/onos/providers/bgp/pom.xml58
-rwxr-xr-xframework/src/onos/providers/bgp/topology/pom.xml33
-rwxr-xr-xframework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java125
-rwxr-xr-xframework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/package-info.java19
-rwxr-xr-xframework/src/onos/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java313
-rw-r--r--framework/src/onos/providers/host/pom.xml66
-rw-r--r--framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java439
-rw-r--r--framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java1041
-rw-r--r--framework/src/onos/providers/lldp/pom.xml63
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java69
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java261
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromDevice.java31
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromPort.java31
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java760
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionConfig.java144
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionRules.java123
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java944
-rw-r--r--framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionConfigTest.java71
-rw-r--r--framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java141
-rw-r--r--framework/src/onos/providers/netcfghost/pom.xml65
-rw-r--r--framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java196
-rw-r--r--framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/package-info.java20
-rw-r--r--framework/src/onos/providers/netcfghost/src/test/java/org/onosproject/provider/netcfghost/NetworkConfigHostProviderTest.java132
-rw-r--r--framework/src/onos/providers/netconf/app/app.xml31
-rw-r--r--framework/src/onos/providers/netconf/app/features.xml29
-rw-r--r--framework/src/onos/providers/netconf/app/pom.xml43
-rw-r--r--framework/src/onos/providers/netconf/device/pom.xml65
-rw-r--r--framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java222
-rw-r--r--framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java93
-rw-r--r--framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/netconf/pom.xml48
-rw-r--r--framework/src/onos/providers/null/pom.xml61
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/AggLinkTopologySimulator.java49
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/CentipedeTopologySimulator.java30
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/ConfiguredTopologySimulator.java44
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java58
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/MeshTopologySimulator.java44
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java132
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java169
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java420
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java57
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/SpineLeafTopologySimulator.java43
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologyMutationDriver.java223
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java382
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java77
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java52
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullLinkCommand.java68
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/TopologyShapeCompleter.java32
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/package-info.java20
-rw-r--r--framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/package-info.java21
-rw-r--r--framework/src/onos/providers/null/src/main/resources/OSGI-INF/blueprint/shell-config.xml44
-rw-r--r--framework/src/onos/providers/openflow/app/pom.xml49
-rw-r--r--framework/src/onos/providers/openflow/base/app.xml31
-rw-r--r--framework/src/onos/providers/openflow/base/features.xml31
-rw-r--r--framework/src/onos/providers/openflow/base/pom.xml71
-rw-r--r--framework/src/onos/providers/openflow/device/pom.xml39
-rw-r--r--framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java711
-rw-r--r--framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceValueMapper.java73
-rw-r--r--framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/PortStatsCollector.java113
-rw-r--r--framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java403
-rw-r--r--framework/src/onos/providers/openflow/flow/pom.xml40
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java812
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java544
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java246
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java558
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java100
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java882
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NoMappingFoundException.java31
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java625
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowValueMapper.java190
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/TableStatisticsCollector.java95
-rw-r--r--framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/openflow/group/pom.xml34
-rw-r--r--framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupBucketEntryBuilder.java347
-rw-r--r--framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java443
-rw-r--r--framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java111
-rw-r--r--framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java389
-rw-r--r--framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java412
-rw-r--r--framework/src/onos/providers/openflow/meter/pom.xml34
-rw-r--r--framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java159
-rw-r--r--framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java103
-rw-r--r--framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java395
-rw-r--r--framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/openflow/meter/src/test/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProviderTest.java22
-rw-r--r--framework/src/onos/providers/openflow/packet/pom.xml34
-rw-r--r--framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java99
-rw-r--r--framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProvider.java176
-rw-r--r--framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/package-info.java21
-rw-r--r--framework/src/onos/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java431
-rw-r--r--framework/src/onos/providers/openflow/pom.xml64
-rw-r--r--framework/src/onos/providers/ovsdb/app/app.xml30
-rw-r--r--framework/src/onos/providers/ovsdb/app/features.xml34
-rw-r--r--framework/src/onos/providers/ovsdb/app/pom.xml70
-rw-r--r--framework/src/onos/providers/ovsdb/device/pom.xml39
-rw-r--r--framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java151
-rw-r--r--framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/package-info.java21
-rw-r--r--framework/src/onos/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java203
-rw-r--r--framework/src/onos/providers/ovsdb/host/pom.xml39
-rw-r--r--framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java148
-rw-r--r--framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/package-info.java21
-rw-r--r--framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java211
-rw-r--r--framework/src/onos/providers/ovsdb/pom.xml56
-rw-r--r--framework/src/onos/providers/ovsdb/tunnel/pom.xml39
-rw-r--r--framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProvider.java123
-rw-r--r--framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/package-info.java21
-rw-r--r--framework/src/onos/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java185
-rw-r--r--framework/src/onos/providers/pcep/app/app.xml27
-rw-r--r--framework/src/onos/providers/pcep/app/features.xml28
-rw-r--r--framework/src/onos/providers/pcep/app/pom.xml62
-rw-r--r--framework/src/onos/providers/pcep/pom.xml32
-rw-r--r--framework/src/onos/providers/pcep/topology/pom.xml33
-rw-r--r--framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java321
-rw-r--r--framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/package-info.java19
-rw-r--r--framework/src/onos/providers/pcep/tunnel/pom.xml54
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java206
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelData.java386
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java1230
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/RequestType.java41
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/SrpIdGenerators.java56
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java102
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/package-info.java19
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java107
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java204
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepControllerAdapter.java85
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepReleaseTunnelProviderTest.java116
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepSetupTunnelProviderTest.java102
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProviderTest.java101
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepUpdateTunnelProviderTest.java114
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java71
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java122
-rw-r--r--framework/src/onos/providers/pom.xml90
-rw-r--r--framework/src/onos/providers/snmp/alarm/pom.xml34
-rw-r--r--framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/SNMPAlarmProvider.java57
-rw-r--r--framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/package-info.java20
-rw-r--r--framework/src/onos/providers/snmp/pom.xml38
142 files changed, 0 insertions, 22131 deletions
diff --git a/framework/src/onos/providers/bgp/app/app.xml b/framework/src/onos/providers/bgp/app/app.xml
deleted file mode 100755
index 072003b9..00000000
--- a/framework/src/onos/providers/bgp/app/app.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
- -->
-<app name="org.onosproject.bgp" origin="ON.Lab" version="${project.version}"
- featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
- features="${project.artifactId}">
- <description>${project.description}</description>
- <artifact>mvn:${project.groupId}/onos-bgpio/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-bgp-api/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-bgp-ctl/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-bgp-provider-topology/${project.version}</artifact>
-</app>
diff --git a/framework/src/onos/providers/bgp/app/features.xml b/framework/src/onos/providers/bgp/app/features.xml
deleted file mode 100755
index b24d3ffe..00000000
--- a/framework/src/onos/providers/bgp/app/features.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
- ~ 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.
- -->
-<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}/onos-bgpio/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-bgp-api/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-bgp-ctl/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-bgp-provider-topology/${project.version}</bundle>
- </feature>
-</features>
diff --git a/framework/src/onos/providers/bgp/app/pom.xml b/framework/src/onos/providers/bgp/app/pom.xml
deleted file mode 100755
index aa20a5a9..00000000
--- a/framework/src/onos/providers/bgp/app/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-bgp-app</artifactId>
- <packaging>pom</packaging>
- <description>BGP protocol southbound providers</description>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgpio</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-ctl</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-provider-topology</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/bgp/pom.xml b/framework/src/onos/providers/bgp/pom.xml
deleted file mode 100755
index d7d4ac05..00000000
--- a/framework/src/onos/providers/bgp/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
- <artifactId>onos-bgp-providers</artifactId>
- <packaging>pom</packaging>
- <description>BGP-LS protocol providers root</description>
- <modules>
- <module>topology</module>
- <module>app</module>
- </modules>
- <dependencies>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgpio</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-junit</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/bgp/topology/pom.xml b/framework/src/onos/providers/bgp/topology/pom.xml
deleted file mode 100755
index f7a111b0..00000000
--- a/framework/src/onos/providers/bgp/topology/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
- <artifactId>onos-bgp-provider-topology</artifactId>
- <packaging>bundle</packaging>
- <description>BGP topology provider</description>
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-bgp-api</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java b/framework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
deleted file mode 100755
index 34803663..00000000
--- a/framework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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.bgp.topology.impl;
-
-import static org.onosproject.bgp.controller.BgpDpid.uri;
-import static org.onosproject.net.DeviceId.deviceId;
-
-import org.onlab.packet.ChassisId;
-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.onosproject.bgp.controller.BgpController;
-import org.onosproject.bgp.controller.BgpDpid;
-import org.onosproject.bgp.controller.BgpNodeListener;
-import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Provider which uses an BGP controller to detect network infrastructure topology.
- */
-@Component(immediate = true)
-public class BgpTopologyProvider extends AbstractProvider implements DeviceProvider {
-
- public BgpTopologyProvider() {
- super(new ProviderId("bgp", "org.onosproject.provider.bgp"));
- }
-
- private static final Logger log = LoggerFactory.getLogger(BgpTopologyProvider.class);
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceProviderRegistry deviceProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected BgpController controller;
-
- private DeviceProviderService deviceProviderService;
-
- private InternalBgpProvider listener = new InternalBgpProvider();
- private static final String UNKNOWN = "unknown";
-
- @Activate
- public void activate() {
- deviceProviderService = deviceProviderRegistry.register(this);
- controller.addListener(listener);
- }
-
- @Deactivate
- public void deactivate() {
- controller.removeListener(listener);
- }
-
- /*
- * Implements device and link update.
- */
- private class InternalBgpProvider implements BgpNodeListener {
-
- @Override
- public void addNode(BgpNodeLSNlriVer4 nodeNlri) {
- log.debug("Add node {}", nodeNlri.toString());
-
- if (deviceProviderService == null) {
- return;
- }
- BgpDpid nodeUri = new BgpDpid(nodeNlri);
- DeviceId deviceId = deviceId(uri(nodeUri.toString()));
- ChassisId cId = new ChassisId();
-
- DeviceDescription description = new DefaultDeviceDescription(uri(nodeUri.toString()), Device.Type.ROUTER,
- UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, cId);
- deviceProviderService.deviceConnected(deviceId, description);
-
- }
-
- @Override
- public void deleteNode(BgpNodeLSNlriVer4 nodeNlri) {
- log.debug("Delete node {}", nodeNlri.toString());
-
- if (deviceProviderService == null) {
- return;
- }
-
- BgpDpid nodeUri = new BgpDpid(nodeNlri);
- deviceProviderService.deviceDisconnected(deviceId(uri(nodeUri.toString())));
- }
- }
-
- @Override
- public void triggerProbe(DeviceId deviceId) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
- }
-
- @Override
- public boolean isReachable(DeviceId deviceId) {
- // TODO Auto-generated method stub
- return true;
- }
-}
diff --git a/framework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/package-info.java b/framework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/package-info.java
deleted file mode 100755
index 0287ec7e..00000000
--- a/framework/src/onos/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-/**
- *Provider that uses BGP controller as a means of infrastructure topology discovery.
- */
-package org.onosproject.provider.bgp.topology.impl; \ No newline at end of file
diff --git a/framework/src/onos/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java b/framework/src/onos/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java
deleted file mode 100755
index 37576e44..00000000
--- a/framework/src/onos/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright 2014-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.bgp.topology.impl;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.bgp.controller.BgpCfg;
-import org.onosproject.bgp.controller.BgpController;
-import org.onosproject.bgp.controller.BgpId;
-import org.onosproject.bgp.controller.BgpPeer;
-import org.onosproject.bgp.controller.BgpLocalRib;
-import org.onosproject.bgp.controller.BgpNodeListener;
-import org.onosproject.bgp.controller.BgpPeerManager;
-import org.onosproject.bgpio.exceptions.BgpParseException;
-import org.onosproject.bgpio.protocol.BgpMessage;
-import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSIdentifier;
-import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4;
-import org.onosproject.bgpio.protocol.linkstate.NodeDescriptors;
-import org.onosproject.bgpio.types.AutonomousSystemTlv;
-import org.onosproject.bgpio.types.BgpValueType;
-import org.onosproject.bgpio.types.RouteDistinguisher;
-import org.onosproject.bgpio.util.Constants;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.device.PortStatistics;
-import org.onosproject.net.provider.ProviderId;
-
-public class BgpTopologyProviderTest {
-
- private static final DeviceId DID1 = DeviceId
- .deviceId("bgp:bgpls://0:direct:0/&=bgpnodelsidentifier%7bnodedescriptors=nodedescriptors%7bdestype=512,"
- + "%20deslength=4,%20subtlvs=[autonomoussystemtlv%7btype=512,%20length=4,%20asnum=100%7d]%7d%7d");
- private static final DeviceId DID2 = DeviceId
- .deviceId("bgp:bgpls://0:direct:0/&=bgpnodelsidentifier%7bnodedescriptors=nodedescriptors%7bdestype=512,"
- + "%20deslength=4,%20subtlvs=[autonomoussystemtlv%7btype=512,%20length=4,%20asnum=10%7d]%7d%7d");
- private static final DeviceId DID3 = DeviceId
- .deviceId("bgp:bgpls://direct:0/&=nodedescriptors%7bdestype=512,%20deslength=4,"
- + "%20subtlvs=[autonomoussystemtlv%7btype=512,%20length=4,%20asnum=100%7d]%7d");
- private final BgpTopologyProvider provider = new BgpTopologyProvider();
- private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry();
- private final TestController controller = new TestController();
-
- @Before
- public void startUp() {
- provider.deviceProviderRegistry = nodeRegistry;
- provider.controller = controller;
- provider.activate();
- assertNotNull("provider should be registered", nodeRegistry.provider);
- assertNotNull("listener should be registered", controller.nodeListener);
- }
-
- @After
- public void tearDown() {
- provider.deactivate();
- assertNull("listener should be removed", controller.nodeListener);
- provider.controller = null;
- provider.deviceProviderRegistry = null;
- }
-
- /* Class implement device test registry */
- private class TestDeviceRegistry implements DeviceProviderRegistry {
- DeviceProvider provider;
-
- Set<DeviceId> connected = new HashSet<>();
-
- @Override
- public DeviceProviderService register(DeviceProvider provider) {
- this.provider = provider;
- return new TestProviderService();
- }
-
- @Override
- public void unregister(DeviceProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- private class TestProviderService implements DeviceProviderService {
-
- @Override
- public DeviceProvider provider() {
- return null;
- }
-
- @Override
- public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
- if (deviceId.equals(DID1)) {
- connected.add(deviceId);
- }
- }
-
- @Override
- public void deviceDisconnected(DeviceId deviceId) {
- if (deviceId.equals(DID1)) {
- connected.remove(deviceId);
- }
- }
-
- @Override
- public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
- // TODO Auto-generated method stub
-
- }
- }
- }
-
- /* class implement test controller */
- private class TestController implements BgpController {
- protected Set<BgpNodeListener> nodeListener = new CopyOnWriteArraySet<>();
-
- @Override
- public void addListener(BgpNodeListener nodeListener) {
- this.nodeListener.add(nodeListener);
- }
-
- @Override
- public void removeListener(BgpNodeListener nodeListener) {
- this.nodeListener = null;
- }
-
- @Override
- public Iterable<BgpPeer> getPeers() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public BgpPeer getPeer(BgpId bgpId) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void writeMsg(BgpId bgpId, BgpMessage msg) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void processBGPPacket(BgpId bgpId, BgpMessage msg) throws BgpParseException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void closeConnectedPeers() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public BgpCfg getConfig() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public int connectedPeerCount() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public BgpLocalRib bgpLocalRibVpn() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public BgpLocalRib bgpLocalRib() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public BgpPeerManager peerManager() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Map<BgpId, BgpPeer> connectedPeers() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Set<BgpNodeListener> listener() {
- // TODO Auto-generated method stub
- return null;
- }
- }
-
- /* Validate node is added to the device validating URI, RIB should get updated properly */
- @Test
- public void bgpTopologyProviderTestAddDevice1() {
- int deviceAddCount = 0;
- LinkedList<BgpValueType> subTlvs;
- subTlvs = new LinkedList<>();
- BgpValueType tlv = new AutonomousSystemTlv(100);
- short deslength = AutonomousSystemTlv.LENGTH;
- short desType = AutonomousSystemTlv.TYPE;
-
- subTlvs.add(tlv);
- BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
- desType));
- BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
- new RouteDistinguisher());
-
- nodeNlri.setNodeLSIdentifier(localNodeDescriptors);
- for (BgpNodeListener l : controller.nodeListener) {
- l.addNode(nodeNlri);
- deviceAddCount = nodeRegistry.connected.size();
- assertTrue(deviceAddCount == 1);
- l.deleteNode(nodeNlri);
- deviceAddCount = nodeRegistry.connected.size();
- assertTrue(deviceAddCount == 0);
- }
- }
-
- /* Validate node is not added to the device for invalid URI, RIB count should be zero */
- @Test
- public void bgpTopologyProviderTestAddDevice2() {
- LinkedList<BgpValueType> subTlvs;
- BgpValueType tlv = new AutonomousSystemTlv(10);
- short deslength = AutonomousSystemTlv.LENGTH;
- short desType = AutonomousSystemTlv.TYPE;
-
- subTlvs = new LinkedList<>();
- subTlvs.add(tlv);
- BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
- desType));
- BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
- new RouteDistinguisher());
-
- nodeNlri.setNodeLSIdentifier(localNodeDescriptors);
- for (BgpNodeListener l : controller.nodeListener) {
- l.addNode(nodeNlri);
- assertTrue("Failed to add device", (nodeRegistry.connected.size() == 0));
- }
- }
-
- /* Delete node when node does not exist, RIB count should be zero */
- @Test
- public void bgpTopologyProviderTestAddDevice3() {
- LinkedList<BgpValueType> subTlvs;
- BgpValueType tlv = new AutonomousSystemTlv(10);
- short deslength = AutonomousSystemTlv.LENGTH;
- short desType = AutonomousSystemTlv.TYPE;
-
- subTlvs = new LinkedList<>();
- subTlvs.add(tlv);
- BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
- desType));
- BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
- new RouteDistinguisher());
-
- nodeNlri.setNodeLSIdentifier(localNodeDescriptors);
- for (BgpNodeListener l : controller.nodeListener) {
- l.deleteNode(nodeNlri);
- assertTrue("Failed to add device", (nodeRegistry.connected.size() == 0));
- }
- }
-}
diff --git a/framework/src/onos/providers/host/pom.xml b/framework/src/onos/providers/host/pom.xml
deleted file mode 100644
index ac1e4273..00000000
--- a/framework/src/onos/providers/host/pom.xml
+++ /dev/null
@@ -1,66 +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-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-host-provider</artifactId>
- <packaging>bundle</packaging>
-
- <properties>
- <onos.app.name>org.onosproject.hostprovider</onos.app.name>
- </properties>
-
- <description>ONOS host location provider</description>
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-osgi</artifactId>
- <version>${project.version}</version>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java b/framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
deleted file mode 100644
index 93f6bf8c..00000000
--- a/framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * Copyright 2014-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.host.impl;
-
-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.Modified;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onlab.packet.ARP;
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.ICMP6;
-import org.onlab.packet.IPacket;
-import org.onlab.packet.IPv6;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onlab.packet.ipv6.IExtensionHeader;
-import org.onlab.packet.ndp.NeighborAdvertisement;
-import org.onlab.packet.ndp.NeighborSolicitation;
-import org.onlab.packet.ndp.RouterAdvertisement;
-import org.onlab.packet.ndp.RouterSolicitation;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketPriority;
-import org.onosproject.net.packet.PacketProcessor;
-import org.onosproject.net.packet.PacketService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.topology.Topology;
-import org.onosproject.net.topology.TopologyService;
-import org.osgi.service.component.ComponentContext;
-import org.slf4j.Logger;
-
-import java.util.Dictionary;
-import java.util.Set;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider which uses an OpenFlow controller to detect network end-station
- * hosts.
- */
-@Component(immediate = true)
-public class HostLocationProvider extends AbstractProvider implements HostProvider {
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PacketService packetService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TopologyService topologyService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostService hostService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceService deviceService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ComponentConfigService cfgService;
-
- private HostProviderService providerService;
-
- private final InternalHostProvider processor = new InternalHostProvider();
- private final DeviceListener deviceListener = new InternalDeviceListener();
-
- private ApplicationId appId;
-
- @Property(name = "hostRemovalEnabled", boolValue = true,
- label = "Enable host removal on port/device down events")
- private boolean hostRemovalEnabled = true;
-
- @Property(name = "ipv6NeighborDiscovery", boolValue = false,
- label = "Enable using IPv6 Neighbor Discovery by the " +
- "Host Location Provider; default is false")
- private boolean ipv6NeighborDiscovery = false;
-
- /**
- * Creates an OpenFlow host provider.
- */
- public HostLocationProvider() {
- super(new ProviderId("of", "org.onosproject.provider.host"));
- }
-
- @Activate
- public void activate(ComponentContext context) {
- cfgService.registerProperties(getClass());
- appId = coreService.registerApplication("org.onosproject.provider.host");
-
- providerService = providerRegistry.register(this);
- packetService.addProcessor(processor, PacketProcessor.advisor(1));
- deviceService.addListener(deviceListener);
- readComponentConfiguration(context);
- requestIntercepts();
-
- log.info("Started with Application ID {}", appId.id());
- }
-
- @Deactivate
- public void deactivate() {
- cfgService.unregisterProperties(getClass(), false);
-
- withdrawIntercepts();
-
- providerRegistry.unregister(this);
- packetService.removeProcessor(processor);
- deviceService.removeListener(deviceListener);
- providerService = null;
- log.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- readComponentConfiguration(context);
- requestIntercepts();
- }
-
- /**
- * Request packet intercepts.
- */
- private void requestIntercepts() {
- TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
- selector.matchEthType(Ethernet.TYPE_ARP);
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
-
- // IPv6 Neighbor Solicitation packet.
- selector.matchEthType(Ethernet.TYPE_IPV6);
- selector.matchIPProtocol(IPv6.PROTOCOL_ICMP6);
- selector.matchIcmpv6Type(ICMP6.NEIGHBOR_SOLICITATION);
- if (ipv6NeighborDiscovery) {
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
- } else {
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
- }
-
- // IPv6 Neighbor Advertisement packet.
- selector.matchIcmpv6Type(ICMP6.NEIGHBOR_ADVERTISEMENT);
- if (ipv6NeighborDiscovery) {
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
- } else {
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
- }
- }
-
- /**
- * Withdraw packet intercepts.
- */
- private void withdrawIntercepts() {
- TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
- selector.matchEthType(Ethernet.TYPE_ARP);
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
-
- // IPv6 Neighbor Solicitation packet.
- selector.matchEthType(Ethernet.TYPE_IPV6);
- selector.matchIPProtocol(IPv6.PROTOCOL_ICMP6);
- selector.matchIcmpv6Type(ICMP6.NEIGHBOR_SOLICITATION);
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
-
- // IPv6 Neighbor Advertisement packet.
- selector.matchIcmpv6Type(ICMP6.NEIGHBOR_ADVERTISEMENT);
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
- }
-
- /**
- * Extracts properties from the component configuration context.
- *
- * @param context the component context
- */
- private void readComponentConfiguration(ComponentContext context) {
- Dictionary<?, ?> properties = context.getProperties();
- Boolean flag;
-
- flag = isPropertyEnabled(properties, "hostRemovalEnabled");
- if (flag == null) {
- log.info("Host removal on port/device down events is not configured, " +
- "using current value of {}", hostRemovalEnabled);
- } else {
- hostRemovalEnabled = flag;
- log.info("Configured. Host removal on port/device down events is {}",
- hostRemovalEnabled ? "enabled" : "disabled");
- }
-
- flag = isPropertyEnabled(properties, "ipv6NeighborDiscovery");
- if (flag == null) {
- log.info("Using IPv6 Neighbor Discovery is not configured, " +
- "using current value of {}", ipv6NeighborDiscovery);
- } else {
- ipv6NeighborDiscovery = flag;
- log.info("Configured. Using IPv6 Neighbor Discovery is {}",
- ipv6NeighborDiscovery ? "enabled" : "disabled");
- }
- }
-
- /**
- * Check property name is defined and set to true.
- *
- * @param properties properties to be looked up
- * @param propertyName the name of the property to look up
- * @return value when the propertyName is defined or return null
- */
- private static Boolean isPropertyEnabled(Dictionary<?, ?> properties,
- String propertyName) {
- Boolean value = null;
- try {
- String s = (String) properties.get(propertyName);
- value = isNullOrEmpty(s) ? null : s.trim().equals("true");
- } catch (ClassCastException e) {
- // No propertyName defined.
- value = null;
- }
- return value;
- }
-
- @Override
- public void triggerProbe(Host host) {
- log.info("Triggering probe on device {}", host);
- }
-
- private class InternalHostProvider implements PacketProcessor {
- /**
- * Update host location only.
- *
- * @param hid host ID
- * @param mac source Mac address
- * @param vlan VLAN ID
- * @param hloc host location
- */
- private void updateLocation(HostId hid, MacAddress mac,
- VlanId vlan, HostLocation hloc) {
- HostDescription desc = new DefaultHostDescription(mac, vlan, hloc);
- try {
- providerService.hostDetected(hid, desc);
- } catch (IllegalStateException e) {
- log.debug("Host {} suppressed", hid);
- }
- }
-
- /**
- * Update host location and IP address.
- *
- * @param hid host ID
- * @param mac source Mac address
- * @param vlan VLAN ID
- * @param hloc host location
- * @param ip source IP address
- */
- private void updateLocationIP(HostId hid, MacAddress mac,
- VlanId vlan, HostLocation hloc,
- IpAddress ip) {
- HostDescription desc = ip.isZero() || ip.isSelfAssigned() ?
- new DefaultHostDescription(mac, vlan, hloc) :
- new DefaultHostDescription(mac, vlan, hloc, ip);
- try {
- providerService.hostDetected(hid, desc);
- } catch (IllegalStateException e) {
- log.debug("Host {} suppressed", hid);
- }
- }
-
- @Override
- public void process(PacketContext context) {
- if (context == null) {
- return;
- }
-
- Ethernet eth = context.inPacket().parsed();
- if (eth == null) {
- return;
- }
- MacAddress srcMac = eth.getSourceMAC();
-
- VlanId vlan = VlanId.vlanId(eth.getVlanID());
- ConnectPoint heardOn = context.inPacket().receivedFrom();
-
- // If this arrived on control port, bail out.
- if (heardOn.port().isLogical()) {
- return;
- }
-
- // If this is not an edge port, bail out.
- Topology topology = topologyService.currentTopology();
- if (topologyService.isInfrastructure(topology, heardOn)) {
- return;
- }
-
- HostLocation hloc = new HostLocation(heardOn, System.currentTimeMillis());
- HostId hid = HostId.hostId(eth.getSourceMAC(), vlan);
-
- // ARP: possible new hosts, update both location and IP
- if (eth.getEtherType() == Ethernet.TYPE_ARP) {
- ARP arp = (ARP) eth.getPayload();
- IpAddress ip = IpAddress.valueOf(IpAddress.Version.INET,
- arp.getSenderProtocolAddress());
- updateLocationIP(hid, srcMac, vlan, hloc, ip);
-
- // IPv4: update location only
- } else if (eth.getEtherType() == Ethernet.TYPE_IPV4) {
- updateLocation(hid, srcMac, vlan, hloc);
-
- //
- // NeighborAdvertisement and NeighborSolicitation: possible
- // new hosts, update both location and IP.
- //
- // IPv6: update location only
- } else if (eth.getEtherType() == Ethernet.TYPE_IPV6) {
- IPv6 ipv6 = (IPv6) eth.getPayload();
- IpAddress ip = IpAddress.valueOf(IpAddress.Version.INET6,
- ipv6.getSourceAddress());
-
- // skip extension headers
- IPacket pkt = ipv6;
- while (pkt.getPayload() != null &&
- pkt.getPayload() instanceof IExtensionHeader) {
- pkt = pkt.getPayload();
- }
-
- // Neighbor Discovery Protocol
- pkt = pkt.getPayload();
- if (pkt != null && pkt instanceof ICMP6) {
- pkt = pkt.getPayload();
- // RouterSolicitation, RouterAdvertisement
- if (pkt != null && (pkt instanceof RouterAdvertisement ||
- pkt instanceof RouterSolicitation)) {
- return;
- }
- if (pkt != null && (pkt instanceof NeighborSolicitation ||
- pkt instanceof NeighborAdvertisement)) {
- // Duplicate Address Detection
- if (ip.isZero()) {
- return;
- }
- // NeighborSolicitation, NeighborAdvertisement
- updateLocationIP(hid, srcMac, vlan, hloc, ip);
- return;
- }
- }
-
- // multicast
- if (eth.isMulticast()) {
- return;
- }
-
- // normal IPv6 packets
- updateLocation(hid, srcMac, vlan, hloc);
- }
- }
- }
-
- // Auxiliary listener to device events.
- private class InternalDeviceListener implements DeviceListener {
- @Override
- public void event(DeviceEvent event) {
- Device device = event.subject();
- switch (event.type()) {
- case DEVICE_ADDED:
- break;
- case DEVICE_AVAILABILITY_CHANGED:
- if (hostRemovalEnabled &&
- !deviceService.isAvailable(device.id())) {
- removeHosts(hostService.getConnectedHosts(device.id()));
- }
- break;
- case DEVICE_SUSPENDED:
- case DEVICE_UPDATED:
- // Nothing to do?
- break;
- case DEVICE_REMOVED:
- if (hostRemovalEnabled) {
- removeHosts(hostService.getConnectedHosts(device.id()));
- }
- break;
- case PORT_ADDED:
- break;
- case PORT_UPDATED:
- if (hostRemovalEnabled) {
- ConnectPoint point =
- new ConnectPoint(device.id(), event.port().number());
- removeHosts(hostService.getConnectedHosts(point));
- }
- break;
- case PORT_REMOVED:
- // Nothing to do?
- break;
- default:
- break;
- }
- }
- }
-
- // Signals host vanish for all specified hosts.
- private void removeHosts(Set<Host> hosts) {
- for (Host host : hosts) {
- providerService.hostVanished(host.id());
- }
- }
-
-}
diff --git a/framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/package-info.java b/framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/package-info.java
deleted file mode 100644
index 57c5c3f6..00000000
--- a/framework/src/onos/providers/host/src/main/java/org/onosproject/provider/host/impl/package-info.java
+++ /dev/null
@@ -1,20 +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.
- */
-
-/**
- * Provider that uses packet service as a means of host discovery and tracking.
- */
-package org.onosproject.provider.host.impl;
diff --git a/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
deleted file mode 100644
index 566eb0c4..00000000
--- a/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ /dev/null
@@ -1,1041 +0,0 @@
-/*
- * Copyright 2014-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.host.impl;
-
-import com.google.common.collect.ImmutableSet;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.osgi.ComponentContextAdapter;
-import org.onlab.packet.ARP;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.ICMP6;
-import org.onlab.packet.IPv4;
-import org.onlab.packet.IPv6;
-import org.onlab.packet.Ip6Address;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onlab.packet.ndp.NeighborAdvertisement;
-import org.onlab.packet.ndp.NeighborSolicitation;
-import org.onlab.packet.ndp.RouterAdvertisement;
-import org.onlab.packet.ndp.RouterSolicitation;
-import org.onosproject.cfg.ComponentConfigAdapter;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.DefaultHost;
-import org.onosproject.net.DefaultPort;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.device.DeviceServiceAdapter;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.HostServiceAdapter;
-import org.onosproject.net.packet.DefaultInboundPacket;
-import org.onosproject.net.packet.InboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketProcessor;
-import org.onosproject.net.packet.PacketServiceAdapter;
-import org.onosproject.net.provider.AbstractProviderService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.topology.Topology;
-import org.onosproject.net.topology.TopologyServiceAdapter;
-
-import java.nio.ByteBuffer;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.Set;
-
-import static org.easymock.EasyMock.*;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.*;
-import static org.onlab.packet.VlanId.vlanId;
-import static org.onosproject.net.Device.Type.SWITCH;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.device.DeviceEvent.Type.*;
-
-public class HostLocationProviderTest {
- private static final Integer INPORT = 10;
- private static final String DEV1 = "of:1";
- private static final String DEV2 = "of:2";
- private static final String DEV3 = "of:3";
- private static final String DEV4 = "of:4";
- private static final String DEV5 = "of:5";
- private static final String DEV6 = "of:6";
-
- private static final VlanId VLAN = vlanId();
-
- // IPv4 Host
- private static final MacAddress MAC = MacAddress.valueOf("00:00:11:00:00:01");
- private static final MacAddress BCMAC = MacAddress.valueOf("ff:ff:ff:ff:ff:ff");
- private static final byte[] IP = new byte[]{10, 0, 0, 1};
- private static final IpAddress IP_ADDRESS =
- IpAddress.valueOf(IpAddress.Version.INET, IP);
- private static final HostLocation LOCATION =
- new HostLocation(deviceId(DEV1), portNumber(INPORT), 0L);
- private static final DefaultHost HOST =
- new DefaultHost(ProviderId.NONE, hostId(MAC), MAC,
- vlanId(VlanId.UNTAGGED), LOCATION,
- ImmutableSet.of(IP_ADDRESS));
-
- // IPv6 Host
- private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02");
- private static final MacAddress BCMAC2 = MacAddress.valueOf("33:33:00:00:00:01");
- private static final byte[] IP2 = Ip6Address.valueOf("1000::1").toOctets();
- private static final IpAddress IP_ADDRESS2 =
- IpAddress.valueOf(IpAddress.Version.INET6, IP2);
- private static final HostLocation LOCATION2 =
- new HostLocation(deviceId(DEV4), portNumber(INPORT), 0L);
- private static final DefaultHost HOST2 =
- new DefaultHost(ProviderId.NONE, hostId(MAC2), MAC2,
- vlanId(VlanId.UNTAGGED), LOCATION2,
- ImmutableSet.of(IP_ADDRESS2));
-
- private static final ComponentContextAdapter CTX_FOR_REMOVE =
- new ComponentContextAdapter() {
- @Override
- public Dictionary getProperties() {
- Hashtable<String, String> props = new Hashtable<>();
- props.put("hostRemovalEnabled", "true");
- return props;
- }
- };
-
- public static final ComponentContextAdapter CTX_FOR_NO_REMOVE =
- new ComponentContextAdapter() {
- @Override
- public Dictionary getProperties() {
- return new Hashtable();
- }
- };
-
- private final HostLocationProvider provider = new HostLocationProvider();
- private final TestHostRegistry hostRegistry = new TestHostRegistry();
- private final TestTopologyService topoService = new TestTopologyService();
- private final TestDeviceService deviceService = new TestDeviceService();
- private final TestHostService hostService = new TestHostService();
- private final TestPacketService packetService = new TestPacketService();
-
- private PacketProcessor testProcessor;
- private CoreService coreService;
- private TestHostProviderService providerService;
-
- private ApplicationId appId =
- new DefaultApplicationId(100, "org.onosproject.provider.host");
-
- @Before
- public void setUp() {
-
- coreService = createMock(CoreService.class);
- expect(coreService.registerApplication(appId.name()))
- .andReturn(appId).anyTimes();
- replay(coreService);
-
- provider.cfgService = new ComponentConfigAdapter();
- provider.coreService = coreService;
-
- provider.providerRegistry = hostRegistry;
- provider.topologyService = topoService;
- provider.packetService = packetService;
- provider.deviceService = deviceService;
- provider.hostService = hostService;
-
- provider.activate(CTX_FOR_NO_REMOVE);
- }
-
- @Test
- public void basics() {
- assertNotNull("registration expected", providerService);
- assertEquals("incorrect provider", provider, providerService.provider());
- }
-
- @Test
- public void events() {
- // new host
- testProcessor.process(new TestArpPacketContext(DEV1));
- assertNotNull("new host expected", providerService.added);
- assertNull("host motion unexpected", providerService.moved);
-
- // the host moved to new switch
- testProcessor.process(new TestArpPacketContext(DEV2));
- assertNotNull("host motion expected", providerService.moved);
-
- // the host was misheard on a spine
- testProcessor.process(new TestArpPacketContext(DEV3));
- assertNull("host misheard on spine switch", providerService.spine);
-
- providerService.clear();
-
- // new host
- testProcessor.process(new TestNaPacketContext(DEV4));
- assertNotNull("new host expected", providerService.added);
- assertNull("host motion unexpected", providerService.moved);
-
- // the host moved to new switch
- testProcessor.process(new TestNaPacketContext(DEV5));
- assertNotNull("host motion expected", providerService.moved);
-
- // the host was misheard on a spine
- testProcessor.process(new TestNaPacketContext(DEV6));
- assertNull("host misheard on spine switch", providerService.spine);
- }
-
- @Test
- public void removeHostByDeviceRemove() {
- provider.modified(CTX_FOR_REMOVE);
- testProcessor.process(new TestArpPacketContext(DEV1));
- testProcessor.process(new TestNaPacketContext(DEV4));
-
- Device device = new DefaultDevice(ProviderId.NONE, deviceId(DEV1), SWITCH,
- "m", "h", "s", "n", new ChassisId(0L));
- deviceService.listener.event(new DeviceEvent(DEVICE_REMOVED, device));
- assertEquals("incorrect remove count", 1, providerService.removeCount);
-
- device = new DefaultDevice(ProviderId.NONE, deviceId(DEV4), SWITCH,
- "m", "h", "s", "n", new ChassisId(0L));
- deviceService.listener.event(new DeviceEvent(DEVICE_REMOVED, device));
- assertEquals("incorrect remove count", 2, providerService.removeCount);
- }
-
- @Test
- public void removeHostByDeviceOffline() {
- provider.modified(CTX_FOR_REMOVE);
- testProcessor.process(new TestArpPacketContext(DEV1));
- testProcessor.process(new TestArpPacketContext(DEV4));
-
- Device device = new DefaultDevice(ProviderId.NONE, deviceId(DEV1), SWITCH,
- "m", "h", "s", "n", new ChassisId(0L));
- deviceService.listener.event(new DeviceEvent(DEVICE_AVAILABILITY_CHANGED, device));
- assertEquals("incorrect remove count", 1, providerService.removeCount);
-
- device = new DefaultDevice(ProviderId.NONE, deviceId(DEV4), SWITCH,
- "m", "h", "s", "n", new ChassisId(0L));
- deviceService.listener.event(new DeviceEvent(DEVICE_AVAILABILITY_CHANGED, device));
- assertEquals("incorrect remove count", 2, providerService.removeCount);
- }
-
- @Test
- public void removeHostByDevicePortDown() {
- provider.modified(CTX_FOR_REMOVE);
- testProcessor.process(new TestArpPacketContext(DEV1));
- testProcessor.process(new TestArpPacketContext(DEV4));
-
- Device device = new DefaultDevice(ProviderId.NONE, deviceId(DEV1), SWITCH,
- "m", "h", "s", "n", new ChassisId(0L));
- deviceService.listener.event(new DeviceEvent(PORT_UPDATED, device,
- new DefaultPort(device, portNumber(INPORT), false)));
- assertEquals("incorrect remove count", 1, providerService.removeCount);
-
- device = new DefaultDevice(ProviderId.NONE, deviceId(DEV4), SWITCH,
- "m", "h", "s", "n", new ChassisId(0L));
- deviceService.listener.event(new DeviceEvent(PORT_UPDATED, device,
- new DefaultPort(device, portNumber(INPORT), false)));
- assertEquals("incorrect remove count", 2, providerService.removeCount);
- }
-
- /**
- * When receiving ARP, updates location and IP.
- */
- @Test
- public void testReceiveArp() {
- testProcessor.process(new TestArpPacketContext(DEV1));
- HostDescription descr = providerService.added;
- assertThat(descr.location(), is(LOCATION));
- assertThat(descr.hwAddress(), is(MAC));
- assertThat(descr.ipAddress().toArray()[0], is(IP_ADDRESS));
- assertThat(descr.vlan(), is(VLAN));
- }
-
- /**
- * When receiving IPv4, updates location only.
- */
- @Test
- public void testReceiveIpv4() {
- testProcessor.process(new TestIpv4PacketContext(DEV1));
- HostDescription descr = providerService.added;
- assertThat(descr.location(), is(LOCATION));
- assertThat(descr.hwAddress(), is(MAC));
- assertThat(descr.ipAddress().size(), is(0));
- assertThat(descr.vlan(), is(VLAN));
- }
-
- /**
- * When receiving NeighborAdvertisement, updates location and IP.
- */
- @Test
- public void testReceiveNa() {
- testProcessor.process(new TestNaPacketContext(DEV4));
- assertNotNull(providerService.added);
- HostDescription descr = providerService.added;
- assertThat(descr.location(), is(LOCATION2));
- assertThat(descr.hwAddress(), is(MAC2));
- assertThat(descr.ipAddress().toArray()[0], is(IP_ADDRESS2));
- assertThat(descr.vlan(), is(VLAN));
- }
-
- /**
- * When receiving NeighborSolicitation, updates location and IP.
- */
- @Test
- public void testReceiveNs() {
- testProcessor.process(new TestNsPacketContext(DEV4));
- HostDescription descr = providerService.added;
- assertThat(descr.location(), is(LOCATION2));
- assertThat(descr.hwAddress(), is(MAC2));
- assertThat(descr.ipAddress().toArray()[0], is(IP_ADDRESS2));
- assertThat(descr.vlan(), is(VLAN));
- }
-
- /**
- * When receiving RouterAdvertisement, ignores it.
- */
- @Test
- public void testReceivesRa() {
- testProcessor.process(new TestRAPacketContext(DEV4));
- assertNull(providerService.added);
- }
-
- /**
- * When receiving RouterSolicitation, ignores it.
- */
- @Test
- public void testReceiveRs() {
- testProcessor.process(new TestRSPacketContext(DEV4));
- assertNull(providerService.added);
- }
-
- /**
- * When receiving Duplicate Address Detection (DAD), ignores it.
- */
- @Test
- public void testReceiveDad() {
- testProcessor.process(new TestDadPacketContext(DEV4));
- assertNull(providerService.added);
- }
-
- /**
- * When receiving IPv6 multicast packet, ignores it.
- */
- @Test
- public void testReceiveIpv6Multicast() {
- testProcessor.process(new TestIpv6McastPacketContext(DEV4));
- assertNull(providerService.added);
- }
-
- /**
- * When receiving IPv6 unicast packet, updates location only.
- */
- @Test
- public void testReceiveIpv6Unicast() {
- testProcessor.process(new TestIpv6PacketContext(DEV4));
- assertNotNull(providerService.added);
- HostDescription descr = providerService.added;
- assertThat(descr.location(), is(LOCATION2));
- assertThat(descr.hwAddress(), is(MAC2));
- assertThat(descr.ipAddress().size(), is(0));
- assertThat(descr.vlan(), is(VLAN));
- }
-
- @After
- public void tearDown() {
- provider.deactivate();
- provider.coreService = null;
- provider.providerRegistry = null;
- }
-
- private class TestHostRegistry implements HostProviderRegistry {
-
- @Override
- public HostProviderService register(HostProvider provider) {
- providerService = new TestHostProviderService(provider);
- return providerService;
- }
-
- @Override
- public void unregister(HostProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- }
-
- private class TestHostProviderService
- extends AbstractProviderService<HostProvider>
- implements HostProviderService {
-
- HostDescription added = null;
- HostDescription moved = null;
- HostDescription spine = null;
- public int removeCount;
-
- public void clear() {
- added = null;
- moved = null;
- spine = null;
- removeCount = 0;
- }
-
- protected TestHostProviderService(HostProvider provider) {
- super(provider);
- }
-
- @Override
- public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
- if (added == null) {
- added = hostDescription;
- } else if ((moved == null) && hostDescription != added) {
- moved = hostDescription;
- } else {
- spine = hostDescription;
- }
- }
-
- @Override
- public void hostVanished(HostId hostId) {
- removeCount++;
- }
-
- @Override
- public void removeIpFromHost(HostId hostId, IpAddress ipAddress) {
- }
-
- }
-
- private class TestPacketService extends PacketServiceAdapter {
- @Override
- public void addProcessor(PacketProcessor processor, int priority) {
- testProcessor = processor;
- }
- }
-
- private class TestTopologyService extends TopologyServiceAdapter {
- @Override
- public boolean isInfrastructure(Topology topology,
- ConnectPoint connectPoint) {
- //simulate DPID3 as an infrastructure switch
- if ((connectPoint.deviceId()).equals(deviceId(DEV3)) ||
- connectPoint.deviceId().equals(deviceId(DEV6))) {
- return true;
- }
- return false;
- }
- }
-
- /**
- * Generates ARP packet.
- */
- private class TestArpPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestArpPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- ARP arp = new ARP();
- arp.setSenderProtocolAddress(IP)
- .setSenderHardwareAddress(MAC.toBytes())
- .setTargetHardwareAddress(BCMAC.toBytes())
- .setTargetProtocolAddress(IP);
-
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_ARP)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC.toBytes())
- .setDestinationMACAddress(BCMAC)
- .setPayload(arp);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates IPv6 Unicast packet.
- */
- private class TestIpv4PacketContext implements PacketContext {
- private final String deviceId;
-
- public TestIpv4PacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- IPv4 ipv4 = new IPv4();
- ipv4.setDestinationAddress("10.0.0.1");
- ipv4.setSourceAddress(IP_ADDRESS.toString());
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV4)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC)
- .setDestinationMACAddress(MacAddress.valueOf("00:00:00:00:00:01"))
- .setPayload(ipv4);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates NeighborAdvertisement packet.
- */
- private class TestNaPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestNaPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- NeighborAdvertisement na = new NeighborAdvertisement();
- ICMP6 icmp6 = new ICMP6();
- icmp6.setPayload(na);
- IPv6 ipv6 = new IPv6();
- ipv6.setPayload(icmp6);
- ipv6.setDestinationAddress(Ip6Address.valueOf("ff02::1").toOctets());
- ipv6.setSourceAddress(IP2);
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2.toBytes())
- .setDestinationMACAddress(BCMAC2)
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates NeighborSolicitation packet.
- */
- private class TestNsPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestNsPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- NeighborSolicitation ns = new NeighborSolicitation();
- ICMP6 icmp6 = new ICMP6();
- icmp6.setPayload(ns);
- IPv6 ipv6 = new IPv6();
- ipv6.setPayload(icmp6);
- ipv6.setDestinationAddress(Ip6Address.valueOf("ff02::1:ff00:0000").toOctets());
- ipv6.setSourceAddress(IP2);
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2.toBytes())
- .setDestinationMACAddress(BCMAC2)
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates Duplicate Address Detection packet.
- */
- private class TestDadPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestDadPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- NeighborSolicitation ns = new NeighborSolicitation();
- ICMP6 icmp6 = new ICMP6();
- icmp6.setPayload(ns);
- IPv6 ipv6 = new IPv6();
- ipv6.setPayload(icmp6);
- ipv6.setDestinationAddress(Ip6Address.valueOf("ff02::1").toOctets());
- ipv6.setSourceAddress(Ip6Address.valueOf("::").toOctets());
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2.toBytes())
- .setDestinationMACAddress(BCMAC2)
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates Router Solicitation packet.
- */
- private class TestRSPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestRSPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- RouterSolicitation ns = new RouterSolicitation();
- ICMP6 icmp6 = new ICMP6();
- icmp6.setPayload(ns);
- IPv6 ipv6 = new IPv6();
- ipv6.setPayload(icmp6);
- ipv6.setDestinationAddress(Ip6Address.valueOf("ff02::2").toOctets());
- ipv6.setSourceAddress(Ip6Address.valueOf("::").toOctets());
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2.toBytes())
- .setDestinationMACAddress(MacAddress.valueOf("33:33:00:00:00:02"))
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates Router Advertisement packet.
- */
- private class TestRAPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestRAPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- RouterAdvertisement ns = new RouterAdvertisement();
- ICMP6 icmp6 = new ICMP6();
- icmp6.setPayload(ns);
- IPv6 ipv6 = new IPv6();
- ipv6.setPayload(icmp6);
- ipv6.setDestinationAddress(Ip6Address.valueOf("ff02::1").toOctets());
- ipv6.setSourceAddress(IP2);
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2.toBytes())
- .setDestinationMACAddress(MacAddress.valueOf("33:33:00:00:00:01"))
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates IPv6 Multicast packet.
- */
- private class TestIpv6McastPacketContext implements PacketContext {
- private final String deviceId;
-
- public TestIpv6McastPacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- IPv6 ipv6 = new IPv6();
- ipv6.setDestinationAddress(Ip6Address.valueOf("ff02::1").toOctets());
- ipv6.setSourceAddress(IP2);
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2.toBytes())
- .setDestinationMACAddress(MacAddress.valueOf("33:33:00:00:00:01"))
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- /**
- * Generates IPv6 Unicast packet.
- */
- private class TestIpv6PacketContext implements PacketContext {
- private final String deviceId;
-
- public TestIpv6PacketContext(String deviceId) {
- this.deviceId = deviceId;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- IPv6 ipv6 = new IPv6();
- ipv6.setDestinationAddress(Ip6Address.valueOf("1000::1").toOctets());
- ipv6.setSourceAddress(IP2);
- Ethernet eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV6)
- .setVlanID(VLAN.toShort())
- .setSourceMACAddress(MAC2)
- .setDestinationMACAddress(MacAddress.valueOf("00:00:00:00:00:01"))
- .setPayload(ipv6);
- ConnectPoint receivedFrom = new ConnectPoint(deviceId(deviceId),
- portNumber(INPORT));
- return new DefaultInboundPacket(receivedFrom, eth,
- ByteBuffer.wrap(eth.serialize()));
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- return false;
- }
-
- @Override
- public boolean isHandled() {
- return false;
- }
- }
-
- private class TestDeviceService extends DeviceServiceAdapter {
- private DeviceListener listener;
-
- @Override
- public void addListener(DeviceListener listener) {
- this.listener = listener;
- }
-
- @Override
- public Iterable<Device> getDevices() {
- return Collections.emptyList();
- }
- }
-
- private class TestHostService extends HostServiceAdapter {
- @Override
- public Set<Host> getConnectedHosts(ConnectPoint connectPoint) {
- ConnectPoint cp1 = new ConnectPoint(deviceId(DEV1), portNumber(INPORT));
- ConnectPoint cp2 = new ConnectPoint(deviceId(DEV4), portNumber(INPORT));
- if (connectPoint.equals(cp1)) {
- return ImmutableSet.of(HOST);
- } else if (connectPoint.equals(cp2)) {
- return ImmutableSet.of(HOST2);
- } else {
- return ImmutableSet.of();
- }
- }
-
- @Override
- public Set<Host> getConnectedHosts(DeviceId deviceId) {
- if (deviceId.equals(deviceId(DEV1))) {
- return ImmutableSet.of(HOST);
- } else if (deviceId.equals(deviceId(DEV4))) {
- return ImmutableSet.of(HOST2);
- } else {
- return ImmutableSet.of();
- }
- }
-
- }
-}
diff --git a/framework/src/onos/providers/lldp/pom.xml b/framework/src/onos/providers/lldp/pom.xml
deleted file mode 100644
index adf0d0dc..00000000
--- a/framework/src/onos/providers/lldp/pom.xml
+++ /dev/null
@@ -1,63 +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-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-lldp-provider</artifactId>
- <packaging>bundle</packaging>
-
- <properties>
- <onos.app.name>org.onosproject.lldpprovider</onos.app.name>
- </properties>
-
- <description>ONOS LLDP link provider</description>
-
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
deleted file mode 100644
index a9da92ab..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.lldp.impl;
-
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.LinkKey;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.packet.PacketService;
-
-/**
- * Shared context for use by link discovery.
- */
-interface DiscoveryContext {
-
- /**
- * Returns the shared mastership service reference.
- *
- * @return mastership service
- */
- MastershipService mastershipService();
-
- /**
- * Returns the shared link provider service reference.
- *
- * @return link provider service
- */
- LinkProviderService providerService();
-
- /**
- * Returns the shared packet service reference.
- *
- * @return packet service
- */
- PacketService packetService();
-
- /**
- * Returns the probe rate in millis.
- *
- * @return probe rate
- */
- long probeRate();
-
- /**
- * Indicates whether to emit BDDP.
- *
- * @return true to emit BDDP
- */
- boolean useBddp();
-
- /**
- * Touches the link identified by the given key to indicate that it's active.
- *
- * @param key link key
- */
- void touchLink(LinkKey key);
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
deleted file mode 100644
index 4b962ae5..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright 2014-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.lldp.impl;
-
-import com.google.common.collect.Sets;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.ONOSLLDP;
-import org.onlab.util.Timer;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Link.Type;
-import org.onosproject.net.LinkKey;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.link.DefaultLinkDescription;
-import org.onosproject.net.link.LinkDescription;
-import org.onosproject.net.packet.DefaultOutboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.net.packet.PacketContext;
-import org.slf4j.Logger;
-
-import java.nio.ByteBuffer;
-import java.util.Set;
-
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Run discovery process from a physical switch. Ports are initially labeled as
- * slow ports. When an LLDP is successfully received, label the remote port as
- * fast. Every probeRate milliseconds, loop over all fast ports and send an
- * LLDP, send an LLDP for a single slow port. Based on FlowVisor topology
- * discovery implementation.
- */
-class LinkDiscovery implements TimerTask {
-
- private final Logger log = getLogger(getClass());
-
- private static final String SRC_MAC = "DE:AD:BE:EF:BA:11";
-
- private final Device device;
- private final DiscoveryContext context;
-
- private final ONOSLLDP lldpPacket;
- private final Ethernet ethPacket;
- private final Ethernet bddpEth;
-
- private Timeout timeout;
- private volatile boolean isStopped;
-
- // Set of ports to be probed
- private final Set<Long> ports = Sets.newConcurrentHashSet();
-
- /**
- * Instantiates discovery manager for the given physical switch. Creates a
- * generic LLDP packet that will be customized for the port it is sent out on.
- * Starts the the timer for the discovery process.
- *
- * @param device the physical switch
- * @param context discovery context
- */
- LinkDiscovery(Device device, DiscoveryContext context) {
- this.device = device;
- this.context = context;
-
- lldpPacket = new ONOSLLDP();
- lldpPacket.setChassisId(device.chassisId());
- lldpPacket.setDevice(device.id().toString());
-
- ethPacket = new Ethernet();
- ethPacket.setEtherType(Ethernet.TYPE_LLDP);
- ethPacket.setDestinationMACAddress(ONOSLLDP.LLDP_NICIRA);
- ethPacket.setPayload(this.lldpPacket);
- ethPacket.setPad(true);
-
- bddpEth = new Ethernet();
- bddpEth.setPayload(lldpPacket);
- bddpEth.setEtherType(Ethernet.TYPE_BSN);
- bddpEth.setDestinationMACAddress(ONOSLLDP.BDDP_MULTICAST);
- bddpEth.setPad(true);
-
- isStopped = true;
- start();
- log.debug("Started discovery manager for switch {}", device.id());
-
- }
-
- synchronized void stop() {
- if (!isStopped) {
- isStopped = true;
- timeout.cancel();
- } else {
- log.warn("LinkDiscovery stopped multiple times?");
- }
- }
-
- synchronized void start() {
- if (isStopped) {
- isStopped = false;
- timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
- } else {
- log.warn("LinkDiscovery started multiple times?");
- }
- }
-
- synchronized boolean isStopped() {
- return isStopped || timeout.isCancelled();
- }
-
- /**
- * Add physical port to discovery process.
- * Send out initial LLDP and label it as slow port.
- *
- * @param port the port
- */
- void addPort(Port port) {
- boolean newPort = ports.add(port.number().toLong());
- boolean isMaster = context.mastershipService().isLocalMaster(device.id());
- if (newPort && isMaster) {
- log.debug("Sending initial probe to port {}@{}", port.number().toLong(), device.id());
- sendProbes(port.number().toLong());
- }
- }
-
- /**
- * removed physical port from discovery process.
- * @param port the port number
- */
- void removePort(PortNumber port) {
- ports.remove(port.toLong());
- }
-
- /**
- * Handles an incoming LLDP packet. Creates link in topology and adds the
- * link for staleness tracking.
- *
- * @param packetContext packet context
- * @return true if handled
- */
- boolean handleLldp(PacketContext packetContext) {
- Ethernet eth = packetContext.inPacket().parsed();
- if (eth == null) {
- return false;
- }
-
- ONOSLLDP onoslldp = ONOSLLDP.parseONOSLLDP(eth);
- if (onoslldp != null) {
- PortNumber srcPort = portNumber(onoslldp.getPort());
- PortNumber dstPort = packetContext.inPacket().receivedFrom().port();
- DeviceId srcDeviceId = DeviceId.deviceId(onoslldp.getDeviceString());
- DeviceId dstDeviceId = packetContext.inPacket().receivedFrom().deviceId();
-
- ConnectPoint src = new ConnectPoint(srcDeviceId, srcPort);
- ConnectPoint dst = new ConnectPoint(dstDeviceId, dstPort);
-
- LinkDescription ld = eth.getEtherType() == Ethernet.TYPE_LLDP ?
- new DefaultLinkDescription(src, dst, Type.DIRECT) :
- new DefaultLinkDescription(src, dst, Type.INDIRECT);
-
- try {
- context.providerService().linkDetected(ld);
- context.touchLink(LinkKey.linkKey(src, dst));
- } catch (IllegalStateException e) {
- return true;
- }
- return true;
- }
- return false;
- }
-
-
- /**
- * Execute this method every t milliseconds. Loops over all ports
- * labeled as fast and sends out an LLDP. Send out an LLDP on a single slow
- * port.
- *
- * @param t timeout
- */
- @Override
- public void run(Timeout t) {
- if (isStopped()) {
- return;
- }
-
- if (context.mastershipService().isLocalMaster(device.id())) {
- log.trace("Sending probes from {}", device.id());
- ports.forEach(this::sendProbes);
- }
-
- if (!isStopped()) {
- timeout = Timer.getTimer().newTimeout(this, context.probeRate(), MILLISECONDS);
- }
- }
-
- /**
- * Creates packet_out LLDP for specified output port.
- *
- * @param port the port
- * @return Packet_out message with LLDP data
- */
- private OutboundPacket createOutBoundLldp(Long port) {
- if (port == null) {
- return null;
- }
- lldpPacket.setPortId(port.intValue());
- ethPacket.setSourceMACAddress(SRC_MAC);
- return new DefaultOutboundPacket(device.id(),
- builder().setOutput(portNumber(port)).build(),
- ByteBuffer.wrap(ethPacket.serialize()));
- }
-
- /**
- * Creates packet_out BDDP for specified output port.
- *
- * @param port the port
- * @return Packet_out message with LLDP data
- */
- private OutboundPacket createOutBoundBddp(Long port) {
- if (port == null) {
- return null;
- }
- lldpPacket.setPortId(port.intValue());
- bddpEth.setSourceMACAddress(SRC_MAC);
- return new DefaultOutboundPacket(device.id(),
- builder().setOutput(portNumber(port)).build(),
- ByteBuffer.wrap(bddpEth.serialize()));
- }
-
- private void sendProbes(Long portNumber) {
- log.trace("Sending probes out to {}@{}", portNumber, device.id());
- OutboundPacket pkt = createOutBoundLldp(portNumber);
- context.packetService().emit(pkt);
- if (context.useBddp()) {
- OutboundPacket bpkt = createOutBoundBddp(portNumber);
- context.packetService().emit(bpkt);
- }
- }
-
- boolean containsPort(long portNumber) {
- return ports.contains(portNumber);
- }
-
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromDevice.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromDevice.java
deleted file mode 100644
index 32b12d47..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromDevice.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.lldp.impl;
-
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.config.basics.BasicFeatureConfig;
-
-/**
- * Configuration to see LinkDiscovery should be enabled on Device.
- */
-public class LinkDiscoveryFromDevice extends BasicFeatureConfig<DeviceId> {
-
- public LinkDiscoveryFromDevice() {
- // default: enabled
- super(true);
- }
-
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromPort.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromPort.java
deleted file mode 100644
index b9a502f8..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscoveryFromPort.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.lldp.impl;
-
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.config.basics.BasicFeatureConfig;
-
-/**
- * Configuration to see LinkDiscovery should be enabled on a Port.
- */
-public class LinkDiscoveryFromPort extends BasicFeatureConfig<ConnectPoint> {
-
- public LinkDiscoveryFromPort() {
- // default: enabled
- super(true);
- }
-
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
deleted file mode 100644
index 668d59c0..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
+++ /dev/null
@@ -1,760 +0,0 @@
-/*
- * Copyright 2014-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.lldp.impl;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.onlab.packet.Ethernet.TYPE_BSN;
-import static org.onlab.packet.Ethernet.TYPE_LLDP;
-import static org.onlab.util.Tools.get;
-import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.net.Link.Type.DIRECT;
-import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
-import static org.onosproject.net.config.basics.SubjectFactories.CONNECT_POINT_SUBJECT_FACTORY;
-import static org.onosproject.net.config.basics.SubjectFactories.DEVICE_SUBJECT_FACTORY;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Dictionary;
-import java.util.EnumSet;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ScheduledExecutorService;
-
-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.Modified;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onlab.packet.Ethernet;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.mastership.MastershipEvent;
-import org.onosproject.mastership.MastershipListener;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.LinkKey;
-import org.onosproject.net.Port;
-import org.onosproject.net.config.ConfigFactory;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistry;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.link.DefaultLinkDescription;
-import org.onosproject.net.link.LinkProvider;
-import org.onosproject.net.link.LinkProviderRegistry;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketPriority;
-import org.onosproject.net.packet.PacketProcessor;
-import org.onosproject.net.packet.PacketService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.osgi.service.component.ComponentContext;
-import org.slf4j.Logger;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
-
-/**
- * Provider which uses LLDP and BDDP packets to detect network infrastructure links.
- */
-@Component(immediate = true)
-public class LldpLinkProvider extends AbstractProvider implements LinkProvider {
-
- private static final String PROVIDER_NAME = "org.onosproject.provider.lldp";
-
- private static final String FORMAT =
- "Settings: enabled={}, useBDDP={}, probeRate={}, " +
- "staleLinkAge={}";
-
- // When a Device/Port has this annotation, do not send out LLDP/BDDP
- public static final String NO_LLDP = "no-lldp";
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LinkProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceService deviceService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LinkService linkService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PacketService packetService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected MastershipService masterService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ComponentConfigService cfgService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ClusterService clusterService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected NetworkConfigRegistry cfgRegistry;
-
- private LinkProviderService providerService;
-
- private ScheduledExecutorService executor;
-
- // TODO: Add sanity checking for the configurable params based on the delays
- private static final long DEVICE_SYNC_DELAY = 5;
- private static final long LINK_PRUNER_DELAY = 3;
-
- private static final String PROP_ENABLED = "enabled";
- @Property(name = PROP_ENABLED, boolValue = true,
- label = "If false, link discovery is disabled")
- private boolean enabled = false;
-
- private static final String PROP_USE_BDDP = "useBDDP";
- @Property(name = PROP_USE_BDDP, boolValue = true,
- label = "Use BDDP for link discovery")
- private boolean useBddp = true;
-
- private static final String PROP_PROBE_RATE = "probeRate";
- private static final int DEFAULT_PROBE_RATE = 3_000;
- @Property(name = PROP_PROBE_RATE, intValue = DEFAULT_PROBE_RATE,
- label = "LLDP and BDDP probe rate specified in millis")
- private int probeRate = DEFAULT_PROBE_RATE;
-
- private static final String PROP_STALE_LINK_AGE = "staleLinkAge";
- private static final int DEFAULT_STALE_LINK_AGE = 10_000;
- @Property(name = PROP_STALE_LINK_AGE, intValue = DEFAULT_STALE_LINK_AGE,
- label = "Number of millis beyond which links will be considered stale")
- private int staleLinkAge = DEFAULT_STALE_LINK_AGE;
-
- private final DiscoveryContext context = new InternalDiscoveryContext();
- private final InternalRoleListener roleListener = new InternalRoleListener();
- private final InternalDeviceListener deviceListener = new InternalDeviceListener();
- private final InternalPacketProcessor packetProcessor = new InternalPacketProcessor();
-
- // Device link discovery helpers.
- protected final Map<DeviceId, LinkDiscovery> discoverers = new ConcurrentHashMap<>();
-
- // Most recent time a tracked link was seen; links are tracked if their
- // destination connection point is mastered by this controller instance.
- private final Map<LinkKey, Long> linkTimes = Maps.newConcurrentMap();
-
- private ApplicationId appId;
-
- static final SuppressionRules DEFAULT_RULES
- = new SuppressionRules(EnumSet.of(Device.Type.ROADM),
- ImmutableMap.of(NO_LLDP, SuppressionRules.ANY_VALUE));
-
- private SuppressionRules rules = LldpLinkProvider.DEFAULT_RULES;
-
- public static final String CONFIG_KEY = "suppression";
- public static final String FEATURE_NAME = "linkDiscovery";
-
- private final Set<ConfigFactory<?, ?>> factories = ImmutableSet.of(
- new ConfigFactory<ApplicationId, SuppressionConfig>(APP_SUBJECT_FACTORY,
- SuppressionConfig.class,
- CONFIG_KEY) {
- @Override
- public SuppressionConfig createConfig() {
- return new SuppressionConfig();
- }
- },
- new ConfigFactory<DeviceId, LinkDiscoveryFromDevice>(DEVICE_SUBJECT_FACTORY,
- LinkDiscoveryFromDevice.class, FEATURE_NAME) {
- @Override
- public LinkDiscoveryFromDevice createConfig() {
- return new LinkDiscoveryFromDevice();
- }
- },
- new ConfigFactory<ConnectPoint, LinkDiscoveryFromPort>(CONNECT_POINT_SUBJECT_FACTORY,
- LinkDiscoveryFromPort.class, FEATURE_NAME) {
- @Override
- public LinkDiscoveryFromPort createConfig() {
- return new LinkDiscoveryFromPort();
- }
- }
- );
-
- private final InternalConfigListener cfgListener = new InternalConfigListener();
-
-
- /**
- * Creates an OpenFlow link provider.
- */
- public LldpLinkProvider() {
- super(new ProviderId("lldp", PROVIDER_NAME));
- }
-
- @Activate
- public void activate(ComponentContext context) {
- cfgService.registerProperties(getClass());
- appId = coreService.registerApplication(PROVIDER_NAME);
-
- cfgRegistry.addListener(cfgListener);
- factories.forEach(cfgRegistry::registerConfigFactory);
-
- SuppressionConfig cfg = cfgRegistry.getConfig(appId, SuppressionConfig.class);
- if (cfg == null) {
- // If no configuration is found, register default.
- cfg = cfgRegistry.addConfig(appId, SuppressionConfig.class);
- cfg.deviceTypes(DEFAULT_RULES.getSuppressedDeviceType())
- .annotation(DEFAULT_RULES.getSuppressedAnnotation())
- .apply();
- }
- cfgListener.reconfigureSuppressionRules(cfg);
-
- modified(context);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- cfgRegistry.removeListener(cfgListener);
- factories.forEach(cfgRegistry::unregisterConfigFactory);
-
- cfgService.unregisterProperties(getClass(), false);
- disable();
- log.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
-
- boolean newEnabled, newUseBddp;
- int newProbeRate, newStaleLinkAge;
- try {
- String s = get(properties, PROP_ENABLED);
- newEnabled = isNullOrEmpty(s) || Boolean.parseBoolean(s.trim());
-
- s = get(properties, PROP_USE_BDDP);
- newUseBddp = isNullOrEmpty(s) || Boolean.parseBoolean(s.trim());
-
- s = get(properties, PROP_PROBE_RATE);
- newProbeRate = isNullOrEmpty(s) ? probeRate : Integer.parseInt(s.trim());
-
- s = get(properties, PROP_STALE_LINK_AGE);
- newStaleLinkAge = isNullOrEmpty(s) ? staleLinkAge : Integer.parseInt(s.trim());
-
- } catch (NumberFormatException e) {
- log.warn("Component configuration had invalid values", e);
- newEnabled = enabled;
- newUseBddp = useBddp;
- newProbeRate = probeRate;
- newStaleLinkAge = staleLinkAge;
- }
-
- boolean wasEnabled = enabled;
-
- enabled = newEnabled;
- useBddp = newUseBddp;
- probeRate = newProbeRate;
- staleLinkAge = newStaleLinkAge;
-
- if (!wasEnabled && enabled) {
- enable();
- } else if (wasEnabled && !enabled) {
- disable();
- } else {
- if (enabled) {
- // update all discovery helper state
- loadDevices();
- }
- }
-
- log.info(FORMAT, enabled, useBddp, probeRate, staleLinkAge);
- }
-
- /**
- * Enables link discovery processing.
- */
- private void enable() {
- providerService = providerRegistry.register(this);
- masterService.addListener(roleListener);
- deviceService.addListener(deviceListener);
- packetService.addProcessor(packetProcessor, PacketProcessor.advisor(0));
-
- loadDevices();
-
- executor = newSingleThreadScheduledExecutor(groupedThreads("onos/link", "discovery-%d"));
- executor.scheduleAtFixedRate(new SyncDeviceInfoTask(),
- DEVICE_SYNC_DELAY, DEVICE_SYNC_DELAY, SECONDS);
- executor.scheduleAtFixedRate(new LinkPrunerTask(),
- LINK_PRUNER_DELAY, LINK_PRUNER_DELAY, SECONDS);
-
- requestIntercepts();
- }
-
- /**
- * Disables link discovery processing.
- */
- private void disable() {
- withdrawIntercepts();
-
- providerRegistry.unregister(this);
- masterService.removeListener(roleListener);
- deviceService.removeListener(deviceListener);
- packetService.removeProcessor(packetProcessor);
-
-
- if (executor != null) {
- executor.shutdownNow();
- }
- discoverers.values().forEach(LinkDiscovery::stop);
- discoverers.clear();
-
- providerService = null;
- }
-
- /**
- * Loads available devices and registers their ports to be probed.
- */
- private void loadDevices() {
- if (!enabled) {
- return;
- }
- deviceService.getAvailableDevices()
- .forEach(d -> updateDevice(d)
- .ifPresent(ld -> updatePorts(ld, d.id())));
- }
-
- private boolean isBlacklisted(DeviceId did) {
- LinkDiscoveryFromDevice cfg = cfgRegistry.getConfig(did, LinkDiscoveryFromDevice.class);
- if (cfg == null) {
- return false;
- }
- return !cfg.enabled();
- }
-
- private boolean isBlacklisted(ConnectPoint cp) {
- // if parent device is blacklisted, so is the port
- if (isBlacklisted(cp.deviceId())) {
- return true;
- }
- LinkDiscoveryFromPort cfg = cfgRegistry.getConfig(cp, LinkDiscoveryFromPort.class);
- if (cfg == null) {
- return false;
- }
- return !cfg.enabled();
- }
-
- private boolean isBlacklisted(Port port) {
- return isBlacklisted(new ConnectPoint(port.element().id(), port.number()));
- }
-
- /**
- * Updates discovery helper for specified device.
- *
- * Adds and starts a discovery helper for specified device if enabled,
- * calls {@link #removeDevice(DeviceId)} otherwise.
- *
- * @param device device to add
- * @return discovery helper if discovery is enabled for the device
- */
- private Optional<LinkDiscovery> updateDevice(Device device) {
- if (device == null) {
- return Optional.empty();
- }
- if (rules.isSuppressed(device) || isBlacklisted(device.id())) {
- log.trace("LinkDiscovery from {} disabled by configuration", device.id());
- removeDevice(device.id());
- return Optional.empty();
- }
- LinkDiscovery ld = discoverers.computeIfAbsent(device.id(),
- did -> new LinkDiscovery(device, context));
- if (ld.isStopped()) {
- ld.start();
- }
- return Optional.of(ld);
- }
-
- /**
- * Removes after stopping discovery helper for specified device.
- * @param deviceId device to remove
- */
- private void removeDevice(final DeviceId deviceId) {
- discoverers.computeIfPresent(deviceId, (did, ld) -> {
- ld.stop();
- return null;
- });
-
- }
-
- /**
- * Updates ports of the specified device to the specified discovery helper.
- */
- private void updatePorts(LinkDiscovery discoverer, DeviceId deviceId) {
- deviceService.getPorts(deviceId).forEach(p -> updatePort(discoverer, p));
- }
-
- /**
- * Updates discovery helper state of the specified port.
- *
- * Adds a port to the discovery helper if up and discovery is enabled,
- * or calls {@link #removePort(Port)} otherwise.
- */
- private void updatePort(LinkDiscovery discoverer, Port port) {
- if (port == null) {
- return;
- }
- if (port.number().isLogical()) {
- // silently ignore logical ports
- return;
- }
-
- if (rules.isSuppressed(port) || isBlacklisted(port)) {
- log.trace("LinkDiscovery from {} disabled by configuration", port);
- removePort(port);
- return;
- }
-
- // check if enabled and turn off discovery?
- if (!port.isEnabled()) {
- removePort(port);
- return;
- }
-
- discoverer.addPort(port);
- }
-
- /**
- * Removes a port from the specified discovery helper.
- * @param port the port
- */
- private void removePort(Port port) {
- if (port.element() instanceof Device) {
- Device d = (Device) port.element();
- LinkDiscovery ld = discoverers.get(d.id());
- if (ld != null) {
- ld.removePort(port.number());
- }
- } else {
- log.warn("Attempted to remove non-Device port", port);
- }
- }
-
- /**
- * Requests packet intercepts.
- */
- private void requestIntercepts() {
- TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
- selector.matchEthType(TYPE_LLDP);
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
-
- selector.matchEthType(TYPE_BSN);
- if (useBddp) {
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
- } else {
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
- }
- }
-
- /**
- * Withdraws packet intercepts.
- */
- private void withdrawIntercepts() {
- TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
- selector.matchEthType(TYPE_LLDP);
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
- selector.matchEthType(TYPE_BSN);
- packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
- }
-
- protected SuppressionRules rules() {
- return rules;
- }
-
- protected void updateRules(SuppressionRules newRules) {
- if (!rules.equals(newRules)) {
- rules = newRules;
- loadDevices();
- }
- }
-
- /**
- * Processes device mastership role changes.
- */
- private class InternalRoleListener implements MastershipListener {
- @Override
- public void event(MastershipEvent event) {
- if (MastershipEvent.Type.BACKUPS_CHANGED.equals(event.type())) {
- // only need new master events
- return;
- }
-
- DeviceId deviceId = event.subject();
- Device device = deviceService.getDevice(deviceId);
- if (device == null) {
- log.debug("Device {} doesn't exist, or isn't there yet", deviceId);
- return;
- }
- if (clusterService.getLocalNode().id().equals(event.roleInfo().master())) {
- updateDevice(device).ifPresent(ld -> updatePorts(ld, device.id()));
- }
- }
- }
-
- /**
- * Processes device events.
- */
- private class InternalDeviceListener implements DeviceListener {
- @Override
- public void event(DeviceEvent event) {
- Device device = event.subject();
- Port port = event.port();
- if (device == null) {
- log.error("Device is null.");
- return;
- }
- log.trace("{} {} {}", event.type(), event.subject(), event);
- final DeviceId deviceId = device.id();
- switch (event.type()) {
- case DEVICE_ADDED:
- case DEVICE_UPDATED:
- updateDevice(device).ifPresent(ld -> updatePorts(ld, deviceId));
- break;
- case PORT_ADDED:
- case PORT_UPDATED:
- if (port.isEnabled()) {
- updateDevice(device).ifPresent(ld -> updatePort(ld, port));
- } else {
- log.debug("Port down {}", port);
- removePort(port);
- providerService.linksVanished(new ConnectPoint(port.element().id(),
- port.number()));
- }
- break;
- case PORT_REMOVED:
- log.debug("Port removed {}", port);
- removePort(port);
- providerService.linksVanished(new ConnectPoint(port.element().id(),
- port.number()));
- break;
- case DEVICE_REMOVED:
- case DEVICE_SUSPENDED:
- log.debug("Device removed {}", deviceId);
- removeDevice(deviceId);
- providerService.linksVanished(deviceId);
- break;
- case DEVICE_AVAILABILITY_CHANGED:
- if (deviceService.isAvailable(deviceId)) {
- log.debug("Device up {}", deviceId);
- updateDevice(device).ifPresent(ld -> updatePorts(ld, deviceId));
- } else {
- log.debug("Device down {}", deviceId);
- removeDevice(deviceId);
- providerService.linksVanished(deviceId);
- }
- break;
- case PORT_STATS_UPDATED:
- break;
- default:
- log.debug("Unknown event {}", event);
- }
- }
- }
-
- /**
- * Processes incoming packets.
- */
- private class InternalPacketProcessor implements PacketProcessor {
- @Override
- public void process(PacketContext context) {
- if (context == null || context.isHandled()) {
- return;
- }
-
- Ethernet eth = context.inPacket().parsed();
- if (eth == null || (eth.getEtherType() != TYPE_LLDP && eth.getEtherType() != TYPE_BSN)) {
- return;
- }
-
- LinkDiscovery ld = discoverers.get(context.inPacket().receivedFrom().deviceId());
- if (ld == null) {
- return;
- }
-
- if (ld.handleLldp(context)) {
- context.block();
- }
- }
- }
-
- /**
- * Auxiliary task to keep device ports up to date.
- */
- private final class SyncDeviceInfoTask implements Runnable {
- @Override
- public void run() {
- if (Thread.currentThread().isInterrupted()) {
- log.info("Interrupted, quitting");
- return;
- }
- // check what deviceService sees, to see if we are missing anything
- try {
- loadDevices();
- } catch (Exception e) {
- // Catch all exceptions to avoid task being suppressed
- log.error("Exception thrown during synchronization process", e);
- }
- }
- }
-
- /**
- * Auxiliary task for pruning stale links.
- */
- private class LinkPrunerTask implements Runnable {
- @Override
- public void run() {
- if (Thread.currentThread().isInterrupted()) {
- log.info("Interrupted, quitting");
- return;
- }
-
- try {
- // TODO: There is still a slight possibility of mastership
- // change occurring right with link going stale. This will
- // result in the stale link not being pruned.
- Maps.filterEntries(linkTimes, e -> {
- if (!masterService.isLocalMaster(e.getKey().dst().deviceId())) {
- return true;
- }
- if (isStale(e.getValue())) {
- providerService.linkVanished(new DefaultLinkDescription(e.getKey().src(),
- e.getKey().dst(),
- DIRECT));
- return true;
- }
- return false;
- }).clear();
-
- } catch (Exception e) {
- // Catch all exceptions to avoid task being suppressed
- log.error("Exception thrown during link pruning process", e);
- }
- }
-
- private boolean isStale(long lastSeen) {
- return lastSeen < System.currentTimeMillis() - staleLinkAge;
- }
- }
-
- /**
- * Provides processing context for the device link discovery helpers.
- */
- private class InternalDiscoveryContext implements DiscoveryContext {
- @Override
- public MastershipService mastershipService() {
- return masterService;
- }
-
- @Override
- public LinkProviderService providerService() {
- return providerService;
- }
-
- @Override
- public PacketService packetService() {
- return packetService;
- }
-
- @Override
- public long probeRate() {
- return probeRate;
- }
-
- @Override
- public boolean useBddp() {
- return useBddp;
- }
-
- @Override
- public void touchLink(LinkKey key) {
- linkTimes.put(key, System.currentTimeMillis());
- }
- }
-
- static final EnumSet<NetworkConfigEvent.Type> CONFIG_CHANGED
- = EnumSet.of(NetworkConfigEvent.Type.CONFIG_ADDED,
- NetworkConfigEvent.Type.CONFIG_UPDATED,
- NetworkConfigEvent.Type.CONFIG_REMOVED);
-
- private class InternalConfigListener implements NetworkConfigListener {
-
- private synchronized void reconfigureSuppressionRules(SuppressionConfig cfg) {
- if (cfg == null) {
- log.error("Suppression Config is null.");
- return;
- }
-
- SuppressionRules newRules = new SuppressionRules(cfg.deviceTypes(),
- cfg.annotation());
-
- updateRules(newRules);
- }
-
- @Override
- public void event(NetworkConfigEvent event) {
- if (event.configClass() == LinkDiscoveryFromDevice.class &&
- CONFIG_CHANGED.contains(event.type())) {
-
- if (event.subject() instanceof DeviceId) {
- final DeviceId did = (DeviceId) event.subject();
- Device device = deviceService.getDevice(did);
- updateDevice(device).ifPresent(ld -> updatePorts(ld, did));
- }
-
- } else if (event.configClass() == LinkDiscoveryFromPort.class &&
- CONFIG_CHANGED.contains(event.type())) {
-
- if (event.subject() instanceof ConnectPoint) {
- ConnectPoint cp = (ConnectPoint) event.subject();
- if (cp.elementId() instanceof DeviceId) {
- final DeviceId did = (DeviceId) cp.elementId();
- Device device = deviceService.getDevice(did);
- Port port = deviceService.getPort(did, cp.port());
- updateDevice(device).ifPresent(ld -> updatePort(ld, port));
- }
- }
-
- } else if (event.configClass().equals(SuppressionConfig.class) &&
- (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) {
- SuppressionConfig cfg = cfgRegistry.getConfig(appId, SuppressionConfig.class);
- reconfigureSuppressionRules(cfg);
- log.trace("Network config reconfigured");
- }
- }
- }
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionConfig.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionConfig.java
deleted file mode 100644
index 5b10f6d2..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionConfig.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2014-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.lldp.impl;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
-
-import org.onosproject.core.ApplicationId;
-import org.onosproject.net.Device;
-import org.onosproject.net.config.Config;
-import org.slf4j.Logger;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import static org.onosproject.provider.lldp.impl.LldpLinkProvider.DEFAULT_RULES;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * LinkDiscovery suppression config class.
- */
-public class SuppressionConfig extends Config<ApplicationId> {
-
- private static final String DEVICE_TYPES = "deviceTypes";
- private static final String ANNOTATION = "annotation";
-
- private static final ObjectMapper MAPPER = new ObjectMapper();
-
- private static final List<Device.Type> DEFAULT_DEVICE_TYPES
- = ImmutableList.copyOf(DEFAULT_RULES.getSuppressedDeviceType());
-
- private final Logger log = getLogger(getClass());
-
- /**
- * Returns types of devices on which LinkDiscovery is suppressed.
- *
- * @return set of device types
- */
- public Set<Device.Type> deviceTypes() {
- return ImmutableSet.copyOf(getList(DEVICE_TYPES, Device.Type::valueOf, DEFAULT_DEVICE_TYPES));
- }
-
- /**
- * Sets types of devices on which LinkDiscovery is suppressed.
- *
- * @param deviceTypes new set of device types; null to clear
- * @return self
- */
- public SuppressionConfig deviceTypes(Set<Device.Type> deviceTypes) {
- return (SuppressionConfig) setOrClear(DEVICE_TYPES, deviceTypes);
- }
-
- /**
- * Returns annotation of Ports on which LinkDiscovery is suppressed.
- *
- * @return key-value pairs of annotation
- */
- public Map<String, String> annotation() {
- ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
-
- String jsonAnnotation = get(ANNOTATION, null);
- if (jsonAnnotation == null || jsonAnnotation.isEmpty()) {
- return ImmutableMap.of();
- }
-
- JsonNode annotationNode;
- try {
- annotationNode = MAPPER.readTree(jsonAnnotation);
- } catch (IOException e) {
- log.error("Failed to read JSON tree from: {}", jsonAnnotation);
- return ImmutableMap.of();
- }
-
- if (annotationNode.isObject()) {
- ObjectNode obj = (ObjectNode) annotationNode;
- Iterator<Map.Entry<String, JsonNode>> it = obj.fields();
- while (it.hasNext()) {
- Map.Entry<String, JsonNode> entry = it.next();
- final String key = entry.getKey();
- final JsonNode value = entry.getValue();
-
- if (value.isValueNode()) {
- if (value.isNull()) {
- builder.put(key, SuppressionRules.ANY_VALUE);
- } else {
- builder.put(key, value.asText());
- }
- } else {
- log.warn("Encountered unexpected JSON field {} for annotation", entry);
- }
- }
- } else {
- log.error("Encountered unexpected JSONNode {} for annotation", annotationNode);
- return ImmutableMap.of();
- }
-
- return builder.build();
- }
-
- /**
- * Sets annotation of Ports on which LinkDiscovery is suppressed.
- *
- * @param annotation new key-value pair of annotation; null to clear
- * @return self
- */
- public SuppressionConfig annotation(Map<String, String> annotation) {
-
- // ANY_VALUE should be null in JSON
- Map<String, String> config = Maps.transformValues(annotation,
- v -> (v == SuppressionRules.ANY_VALUE) ? null : v);
-
- String jsonAnnotation = null;
-
- try {
- // TODO Store annotation as a Map instead of a String (which needs NetworkConfigRegistry modification)
- jsonAnnotation = MAPPER.writeValueAsString(config);
- } catch (JsonProcessingException e) {
- log.error("Failed to write JSON from: {}", annotation);
- }
-
- return (SuppressionConfig) setOrClear(ANNOTATION, jsonAnnotation);
- }
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionRules.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionRules.java
deleted file mode 100644
index 14bc2200..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/SuppressionRules.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2014-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.lldp.impl;
-
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-
-import org.onosproject.net.Annotations;
-import org.onosproject.net.Device;
-import org.onosproject.net.Element;
-import org.onosproject.net.Port;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.base.MoreObjects;
-
-public class SuppressionRules {
-
- public static final String ANY_VALUE = "(any)";
-
- private final Set<Device.Type> suppressedDeviceType;
- private final Map<String, String> suppressedAnnotation;
-
- public SuppressionRules(Set<Device.Type> suppressedType,
- Map<String, String> suppressedAnnotation) {
-
- this.suppressedDeviceType = ImmutableSet.copyOf(suppressedType);
- this.suppressedAnnotation = ImmutableMap.copyOf(suppressedAnnotation);
- }
-
- public boolean isSuppressed(Device device) {
- if (suppressedDeviceType.contains(device.type())) {
- return true;
- }
- final Annotations annotations = device.annotations();
- if (containsSuppressionAnnotation(annotations)) {
- return true;
- }
- return false;
- }
-
- public boolean isSuppressed(Port port) {
- Element parent = port.element();
- if (parent instanceof Device) {
- if (isSuppressed((Device) parent)) {
- return true;
- }
- }
-
- final Annotations annotations = port.annotations();
- if (containsSuppressionAnnotation(annotations)) {
- return true;
- }
- return false;
- }
-
- private boolean containsSuppressionAnnotation(final Annotations annotations) {
- for (Entry<String, String> entry : suppressedAnnotation.entrySet()) {
- final String suppValue = entry.getValue();
- final String suppKey = entry.getKey();
- if (suppValue == ANY_VALUE) {
- if (annotations.keys().contains(suppKey)) {
- return true;
- }
- } else {
- if (suppValue.equals(annotations.value(suppKey))) {
- return true;
- }
- }
- }
- return false;
- }
-
- Set<Device.Type> getSuppressedDeviceType() {
- return suppressedDeviceType;
- }
-
- Map<String, String> getSuppressedAnnotation() {
- return suppressedAnnotation;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(suppressedDeviceType,
- suppressedAnnotation);
- }
-
- @Override
- public boolean equals(Object object) {
- if (object != null && getClass() == object.getClass()) {
- SuppressionRules that = (SuppressionRules) object;
- return Objects.equals(this.suppressedDeviceType,
- that.suppressedDeviceType)
- && Objects.equals(this.suppressedAnnotation,
- that.suppressedAnnotation);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this)
- .add("suppressedDeviceType", suppressedDeviceType)
- .add("suppressedAnnotation", suppressedAnnotation)
- .toString();
- }
-}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/package-info.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/package-info.java
deleted file mode 100644
index 768a6cd2..00000000
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/package-info.java
+++ /dev/null
@@ -1,20 +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.
- */
-
-/**
- * Provider that uses the core as a means of infrastructure link inference.
- */
-package org.onosproject.provider.lldp.impl;
diff --git a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java
deleted file mode 100644
index 758c34e6..00000000
--- a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java
+++ /dev/null
@@ -1,944 +0,0 @@
-/*
- * Copyright 2014-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.lldp.impl;
-
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.ONOSLLDP;
-import org.onosproject.cfg.ComponentConfigAdapter;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.cluster.RoleInfo;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.mastership.MastershipListener;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.DefaultPort;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.config.Config;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigEvent.Type;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistryAdapter;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.device.DeviceServiceAdapter;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.link.LinkDescription;
-import org.onosproject.net.link.LinkProvider;
-import org.onosproject.net.link.LinkProviderRegistry;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.link.LinkServiceAdapter;
-import org.onosproject.net.packet.DefaultInboundPacket;
-import org.onosproject.net.packet.InboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketProcessor;
-import org.onosproject.net.packet.PacketServiceAdapter;
-import org.onosproject.net.provider.AbstractProviderService;
-import org.onosproject.net.provider.ProviderId;
-
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.concurrent.CompletableFuture;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.onosproject.provider.lldp.impl.LldpLinkProvider.DEFAULT_RULES;
-import static org.junit.Assert.assertFalse;
-
-
-public class LldpLinkProviderTest {
-
- private static final DeviceId DID1 = DeviceId.deviceId("of:0000000000000001");
- private static final DeviceId DID2 = DeviceId.deviceId("of:0000000000000002");
- private static final DeviceId DID3 = DeviceId.deviceId("of:0000000000000003");
-
- private static Port pd1;
- private static Port pd2;
- private static Port pd3;
- private static Port pd4;
-
- private final LldpLinkProvider provider = new LldpLinkProvider();
- private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
- private final TestLinkService linkService = new TestLinkService();
- private final TestPacketService packetService = new TestPacketService();
- private final TestDeviceService deviceService = new TestDeviceService();
- private final TestMasterShipService masterService = new TestMasterShipService();
- private final TestNetworkConfigRegistry configRegistry = new TestNetworkConfigRegistry();
-
- private CoreService coreService;
- private TestLinkProviderService providerService;
-
- private PacketProcessor testProcessor;
- private DeviceListener deviceListener;
- private NetworkConfigListener configListener;
-
- private ApplicationId appId =
- new DefaultApplicationId(100, "org.onosproject.provider.lldp");
-
- private TestSuppressionConfig cfg;
-
- private Set<DeviceId> deviceBlacklist;
-
- private Set<ConnectPoint> portBlacklist;
-
- @Before
- public void setUp() {
- deviceBlacklist = new HashSet<>();
- portBlacklist = new HashSet<>();
- cfg = new TestSuppressionConfig();
- coreService = createMock(CoreService.class);
- expect(coreService.registerApplication(appId.name()))
- .andReturn(appId).anyTimes();
- replay(coreService);
-
- provider.cfgService = new ComponentConfigAdapter();
- provider.coreService = coreService;
- provider.cfgRegistry = configRegistry;
-
- provider.deviceService = deviceService;
- provider.linkService = linkService;
- provider.packetService = packetService;
- provider.providerRegistry = linkRegistry;
- provider.masterService = masterService;
-
- provider.activate(null);
- }
-
- @Test
- public void basics() {
- assertNotNull("registration expected", providerService);
- assertEquals("incorrect provider", provider, providerService.provider());
- }
-
- @Test
- public void switchAdd() {
- DeviceEvent de = deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1);
- deviceListener.event(de);
-
- assertFalse("Device not added", provider.discoverers.isEmpty());
- }
-
- @Test
- public void switchRemove() {
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_REMOVED, DID1));
-
- final LinkDiscovery linkDiscovery = provider.discoverers.get(DID1);
- if (linkDiscovery != null) {
- // If LinkDiscovery helper is there after DEVICE_REMOVED,
- // it should be stopped
- assertTrue("Discoverer is not stopped", linkDiscovery.isStopped());
- }
- assertTrue("Device is not gone.", vanishedDpid(DID1));
- }
-
- /**
- * Checks that links on a reconfigured switch are properly removed.
- */
- @Test
- public void switchSuppressedByAnnotation() {
-
- // add device to stub DeviceService
- deviceService.putDevice(device(DID3));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
-
- assertFalse("Device not added", provider.discoverers.isEmpty());
-
- // update device in stub DeviceService with suppression config
- deviceService.putDevice(device(DID3, DefaultAnnotations.builder()
- .set(LldpLinkProvider.NO_LLDP, "true")
- .build()));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_UPDATED, DID3));
-
- // discovery on device is expected to be gone or stopped
- LinkDiscovery linkDiscovery = provider.discoverers.get(DID3);
- if (linkDiscovery != null) {
- assertTrue("Discovery expected to be stopped", linkDiscovery.isStopped());
- }
- }
-
- @Test
- public void switchSuppressByBlacklist() {
- // add device in stub DeviceService
- deviceService.putDevice(device(DID3));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
-
- // add deviveId to device blacklist
- deviceBlacklist.add(DID3);
- configListener.event(new NetworkConfigEvent(Type.CONFIG_ADDED,
- DID3,
- LinkDiscoveryFromDevice.class));
-
- // discovery helper for device is expected to be gone or stopped
- LinkDiscovery linkDiscovery = provider.discoverers.get(DID3);
- if (linkDiscovery != null) {
- assertTrue("Discovery expected to be stopped", linkDiscovery.isStopped());
- }
-
- }
-
- @Test
- public void portUp() {
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID1, port(DID1, 3, true)));
-
- assertTrue("Port not added to discoverer",
- provider.discoverers.get(DID1).containsPort(3L));
- }
-
- @Test
- public void portDown() {
-
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID1, port(DID1, 1, false)));
-
- assertFalse("Port added to discoverer",
- provider.discoverers.get(DID1).containsPort(1L));
- assertTrue("Port is not gone.", vanishedPort(1L));
- }
-
- @Test
- public void portRemoved() {
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID1, port(DID1, 3, true)));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_REMOVED, DID1, port(DID1, 3, true)));
-
- assertTrue("Port is not gone.", vanishedPort(3L));
- assertFalse("Port was not removed from discoverer",
- provider.discoverers.get(DID1).containsPort(3L));
- }
-
- /**
- * Checks that discovery on reconfigured switch are properly restarted.
- */
- @Test
- public void portSuppressedByDeviceAnnotationConfig() {
-
- /// When Device is configured with suppression:ON, Port also is same
-
- // add device in stub DeviceService with suppression configured
- deviceService.putDevice(device(DID3, DefaultAnnotations.builder()
- .set(LldpLinkProvider.NO_LLDP, "true")
- .build()));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
-
- // non-suppressed port added to suppressed device
- final long portno3 = 3L;
- deviceService.putPorts(DID3, port(DID3, portno3, true));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID3, port(DID3, portno3, true)));
-
- // discovery on device is expected to be stopped
- LinkDiscovery linkDiscovery = provider.discoverers.get(DID3);
- if (linkDiscovery != null) {
- assertTrue("Discovery expected to be stopped", linkDiscovery.isStopped());
- }
-
- /// When Device is reconfigured without suppression:OFF,
- /// Port should be included for discovery
-
- // update device in stub DeviceService without suppression configured
- deviceService.putDevice(device(DID3));
- // update the Port in stub DeviceService. (Port has reference to Device)
- deviceService.putPorts(DID3, port(DID3, portno3, true));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_UPDATED, DID3));
-
- // discovery should come back on
- assertFalse("Discoverer is expected to start", provider.discoverers.get(DID3).isStopped());
- assertTrue("Discoverer should contain the port there", provider.discoverers.get(DID3).containsPort(portno3));
- }
-
- /**
- * Checks that discovery on reconfigured switch are properly restarted.
- */
- @Test
- public void portSuppressedByParentDeviceIdBlacklist() {
-
- /// When Device is configured without suppression:OFF,
- /// Port should be included for discovery
-
- // add device in stub DeviceService without suppression configured
- deviceService.putDevice(device(DID3));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
-
- // non-suppressed port added to suppressed device
- final long portno3 = 3L;
- deviceService.putPorts(DID3, port(DID3, portno3, true));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID3, port(DID3, portno3, true)));
-
- // discovery should succeed
- assertFalse("Discoverer is expected to start", provider.discoverers.get(DID3).isStopped());
- assertTrue("Discoverer should contain the port there", provider.discoverers.get(DID3).containsPort(portno3));
-
- // add suppression rule for "deviceId: "of:0000000000000003""
- deviceBlacklist.add(DID3);
- configListener.event(new NetworkConfigEvent(Type.CONFIG_ADDED,
- DID3,
- LinkDiscoveryFromDevice.class));
-
-
- /// When Device is reconfigured with suppression:ON, Port also is same
-
- // update device in stub DeviceService with suppression configured
- deviceService.putDevice(device(DID3));
- // update the Port in stub DeviceService. (Port has reference to Device)
- deviceService.putPorts(DID3, port(DID3, portno3, true));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_UPDATED, DID3));
-
- // discovery helper for device is expected to be gone or stopped
- LinkDiscovery linkDiscovery = provider.discoverers.get(DID3);
- if (linkDiscovery != null) {
- assertTrue("Discovery expected to be stopped", linkDiscovery.isStopped());
- }
- }
-
- /**
- * Checks that discovery on reconfigured switch are properly restarted.
- */
- @Test
- public void portSuppressedByDeviceTypeConfig() {
-
- /// When Device is configured without suppression:OFF,
- /// Port should be included for discovery
-
- // add device in stub DeviceService without suppression configured
- deviceService.putDevice(device(DID1, Device.Type.SWITCH));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
-
- // non-suppressed port added to suppressed device
- final long portno3 = 3L;
- deviceService.putPorts(DID1, port(DID1, portno3, true));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID1, port(DID1, portno3, true)));
-
- // add device in stub DeviceService with suppression configured
- deviceService.putDevice(device(DID2, Device.Type.ROADM));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID2));
-
- // non-suppressed port added to suppressed device
- final long portno4 = 4L;
- deviceService.putPorts(DID2, port(DID2, portno4, true));
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID2, port(DID2, portno4, true)));
-
- // discovery should succeed for this device
- assertFalse("Discoverer is expected to start", provider.discoverers.get(DID1).isStopped());
- assertTrue("Discoverer should contain the port there", provider.discoverers.get(DID1).containsPort(portno3));
-
- // discovery on device is expected to be stopped for this device
- LinkDiscovery linkDiscovery = provider.discoverers.get(DID2);
- if (linkDiscovery != null) {
- assertTrue("Discovery expected to be stopped", linkDiscovery.isStopped());
- }
- }
-
- /**
- * Checks that discovery on reconfigured port are properly restarted.
- */
- @Test
- public void portSuppressedByPortConfig() {
-
- // add device in stub DeviceService without suppression configured
- deviceService.putDevice(device(DID3));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
-
- // suppressed port added to non-suppressed device
- final long portno3 = 3L;
- final Port port3 = port(DID3, portno3, true,
- DefaultAnnotations.builder()
- .set(LldpLinkProvider.NO_LLDP, "true")
- .build());
- deviceService.putPorts(DID3, port3);
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID3, port3));
-
- // discovery helper should be there turned on
- assertFalse("Discoverer is expected to start", provider.discoverers.get(DID3).isStopped());
- assertFalse("Discoverer should not contain the port there",
- provider.discoverers.get(DID3).containsPort(portno3));
- }
-
- @Test
- public void portSuppressedByPortBlacklist() {
-
- // add device in stub DeviceService without suppression configured
- deviceService.putDevice(device(DID3));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
-
- final long portno3 = 3L;
- final Port port3 = port(DID3, portno3, true);
-
- final ConnectPoint cpDid3no3 = new ConnectPoint(DID3, PortNumber.portNumber(portno3));
- portBlacklist.add(cpDid3no3);
-
- // suppressed port added to non-suppressed device
- deviceService.putPorts(DID3, port3);
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID3, port3));
-
- configListener.event(new NetworkConfigEvent(Type.CONFIG_ADDED,
- cpDid3no3,
- LinkDiscoveryFromPort.class));
-
- // discovery helper should be there turned on
- assertFalse("Discoverer is expected to start", provider.discoverers.get(DID3).isStopped());
- // but port is not a discovery target
- assertFalse("Discoverer should not contain the port there",
- provider.discoverers.get(DID3).containsPort(portno3));
- }
-
- @Test
- public void portUnknown() {
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
- // Note: DID3 hasn't been added to TestDeviceService, but only port is added
- deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID3, port(DID3, 1, false)));
-
-
- assertNull("DeviceId exists",
- provider.discoverers.get(DID3));
- }
-
- @Test
- public void unknownPktCtx() {
-
- // Note: DID3 hasn't been added to TestDeviceService
- PacketContext pktCtx = new TestPacketContext(device(DID3));
-
- testProcessor.process(pktCtx);
- assertFalse("Context should still be free", pktCtx.isHandled());
- }
-
- @Test
- public void knownPktCtx() {
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID1));
- deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID2));
- PacketContext pktCtx = new TestPacketContext(deviceService.getDevice(DID2));
-
-
- testProcessor.process(pktCtx);
-
- assertTrue("Link not detected", detectedLink(DID1, DID2));
-
- }
-
-
- @After
- public void tearDown() {
- provider.deactivate();
- provider.coreService = null;
- provider.providerRegistry = null;
- provider.deviceService = null;
- provider.packetService = null;
- }
-
- private DeviceEvent deviceEvent(DeviceEvent.Type type, DeviceId did) {
- return new DeviceEvent(type, deviceService.getDevice(did));
-
- }
-
- private DefaultDevice device(DeviceId did) {
- return new DefaultDevice(ProviderId.NONE, did, Device.Type.SWITCH,
- "TESTMF", "TESTHW", "TESTSW", "TESTSN", new ChassisId());
- }
-
- private DefaultDevice device(DeviceId did, Device.Type type) {
- return new DefaultDevice(ProviderId.NONE, did, type,
- "TESTMF", "TESTHW", "TESTSW", "TESTSN", new ChassisId());
- }
-
- private DefaultDevice device(DeviceId did, Annotations annotations) {
- return new DefaultDevice(ProviderId.NONE, did, Device.Type.SWITCH,
- "TESTMF", "TESTHW", "TESTSW", "TESTSN", new ChassisId(), annotations);
- }
-
- @SuppressWarnings(value = { "unused" })
- private DeviceEvent portEvent(DeviceEvent.Type type, DeviceId did, PortNumber port) {
- return new DeviceEvent(type, deviceService.getDevice(did),
- deviceService.getPort(did, port));
- }
-
- private DeviceEvent portEvent(DeviceEvent.Type type, DeviceId did, Port port) {
- return new DeviceEvent(type, deviceService.getDevice(did), port);
- }
-
- private Port port(DeviceId did, long port, boolean enabled) {
- return new DefaultPort(deviceService.getDevice(did),
- PortNumber.portNumber(port), enabled);
- }
-
- private Port port(DeviceId did, long port, boolean enabled, Annotations annotations) {
- return new DefaultPort(deviceService.getDevice(did),
- PortNumber.portNumber(port), enabled, annotations);
- }
-
- private boolean vanishedDpid(DeviceId... dids) {
- for (int i = 0; i < dids.length; i++) {
- if (!providerService.vanishedDpid.contains(dids[i])) {
- return false;
- }
- }
- return true;
- }
-
- private boolean vanishedPort(Long... ports) {
- for (int i = 0; i < ports.length; i++) {
- if (!providerService.vanishedPort.contains(ports[i])) {
- return false;
- }
- }
- return true;
- }
-
- private boolean detectedLink(DeviceId src, DeviceId dst) {
- for (DeviceId key : providerService.discoveredLinks.keySet()) {
- if (key.equals(src)) {
- return providerService.discoveredLinks.get(src).equals(dst);
- }
- }
- return false;
- }
-
- @Test
- public void addDeviceTypeRule() {
- Device.Type deviceType1 = Device.Type.ROADM;
- Device.Type deviceType2 = Device.Type.SWITCH;
-
- Set<Device.Type> deviceTypes = new HashSet<>();
- deviceTypes.add(deviceType1);
-
- cfg.deviceTypes(deviceTypes);
-
- configEvent(NetworkConfigEvent.Type.CONFIG_ADDED);
-
- assertTrue(provider.rules().getSuppressedDeviceType().contains(deviceType1));
- assertFalse(provider.rules().getSuppressedDeviceType().contains(deviceType2));
- }
-
- @Test
- public void updateDeviceTypeRule() {
- Device.Type deviceType1 = Device.Type.ROADM;
- Device.Type deviceType2 = Device.Type.SWITCH;
- Set<Device.Type> deviceTypes = new HashSet<>();
-
- deviceTypes.add(deviceType1);
- cfg.deviceTypes(deviceTypes);
-
- configEvent(NetworkConfigEvent.Type.CONFIG_ADDED);
-
- deviceTypes.add(deviceType2);
- cfg.deviceTypes(deviceTypes);
-
- configEvent(NetworkConfigEvent.Type.CONFIG_UPDATED);
-
- assertTrue(provider.rules().getSuppressedDeviceType().contains(deviceType1));
- assertTrue(provider.rules().getSuppressedDeviceType().contains(deviceType2));
- }
-
- @Test
- public void addAnnotationRule() {
- final String key1 = "key1", key2 = "key2";
- final String value1 = "value1";
-
- Map<String, String> annotation = new HashMap<>();
- annotation.put(key1, value1);
-
- cfg.annotation(annotation);
-
- configEvent(NetworkConfigEvent.Type.CONFIG_ADDED);
-
- assertTrue(provider.rules().getSuppressedAnnotation().containsKey(key1));
- assertEquals(value1, provider.rules().getSuppressedAnnotation().get(key1));
- assertFalse(provider.rules().getSuppressedAnnotation().containsKey(key2));
- }
-
- @Test
- public void updateAnnotationRule() {
- final String key1 = "key1", key2 = "key2";
- final String value1 = "value1", value2 = "value2";
- Map<String, String> annotation = new HashMap<>();
-
- annotation.put(key1, value1);
- cfg.annotation(annotation);
-
- configEvent(NetworkConfigEvent.Type.CONFIG_ADDED);
-
- assertTrue(provider.rules().getSuppressedAnnotation().containsKey(key1));
- assertEquals(value1, provider.rules().getSuppressedAnnotation().get(key1));
- assertFalse(provider.rules().getSuppressedAnnotation().containsKey(key2));
-
- annotation.put(key2, value2);
- cfg.annotation(annotation);
-
- configEvent(NetworkConfigEvent.Type.CONFIG_UPDATED);
-
- assertTrue(provider.rules().getSuppressedAnnotation().containsKey(key1));
- assertEquals(value1, provider.rules().getSuppressedAnnotation().get(key1));
- assertTrue(provider.rules().getSuppressedAnnotation().containsKey(key2));
- assertEquals(value2, provider.rules().getSuppressedAnnotation().get(key2));
- }
-
- private void configEvent(NetworkConfigEvent.Type evType) {
- configListener.event(new NetworkConfigEvent(evType,
- appId,
- SuppressionConfig.class));
- }
-
-
- private class TestLinkRegistry implements LinkProviderRegistry {
-
- @Override
- public LinkProviderService register(LinkProvider provider) {
- providerService = new TestLinkProviderService(provider);
- return providerService;
- }
-
- @Override
- public void unregister(LinkProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- }
-
- private class TestLinkProviderService
- extends AbstractProviderService<LinkProvider>
- implements LinkProviderService {
-
- List<DeviceId> vanishedDpid = Lists.newLinkedList();
- List<Long> vanishedPort = Lists.newLinkedList();
- Map<DeviceId, DeviceId> discoveredLinks = Maps.newHashMap();
-
- protected TestLinkProviderService(LinkProvider provider) {
- super(provider);
- }
-
- @Override
- public void linkDetected(LinkDescription linkDescription) {
- DeviceId sDid = linkDescription.src().deviceId();
- DeviceId dDid = linkDescription.dst().deviceId();
- discoveredLinks.put(sDid, dDid);
- }
-
- @Override
- public void linkVanished(LinkDescription linkDescription) {
- }
-
- @Override
- public void linksVanished(ConnectPoint connectPoint) {
- vanishedPort.add(connectPoint.port().toLong());
-
- }
-
- @Override
- public void linksVanished(DeviceId deviceId) {
- vanishedDpid.add(deviceId);
- }
-
-
- }
-
-
-
- private class TestPacketContext implements PacketContext {
-
- protected Device device;
- protected boolean blocked = false;
-
- public TestPacketContext(Device dev) {
- device = dev;
- }
-
- @Override
- public long time() {
- return 0;
- }
-
- @Override
- public InboundPacket inPacket() {
- ONOSLLDP lldp = new ONOSLLDP();
- lldp.setChassisId(device.chassisId());
- lldp.setPortId((int) pd1.number().toLong());
- lldp.setDevice(deviceService.getDevice(DID1).id().toString());
-
-
- Ethernet ethPacket = new Ethernet();
- ethPacket.setEtherType(Ethernet.TYPE_LLDP);
- ethPacket.setDestinationMACAddress(ONOSLLDP.LLDP_NICIRA);
- ethPacket.setPayload(lldp);
- ethPacket.setPad(true);
-
-
-
- ethPacket.setSourceMACAddress("DE:AD:BE:EF:BA:11");
-
- ConnectPoint cp = new ConnectPoint(device.id(), pd3.number());
-
- return new DefaultInboundPacket(cp, ethPacket,
- ByteBuffer.wrap(ethPacket.serialize()));
-
- }
-
- @Override
- public OutboundPacket outPacket() {
- return null;
- }
-
- @Override
- public TrafficTreatment.Builder treatmentBuilder() {
- return null;
- }
-
- @Override
- public void send() {
-
- }
-
- @Override
- public boolean block() {
- blocked = true;
- return blocked;
- }
-
- @Override
- public boolean isHandled() {
- return blocked;
- }
-
- }
-
- private class TestPacketService extends PacketServiceAdapter {
- @Override
- public void addProcessor(PacketProcessor processor, int priority) {
- testProcessor = processor;
- }
- }
-
- private class TestDeviceService extends DeviceServiceAdapter {
-
- private final Map<DeviceId, Device> devices = new HashMap<>();
- private final ArrayListMultimap<DeviceId, Port> ports =
- ArrayListMultimap.create();
- public TestDeviceService() {
- Device d1 = new DefaultDevice(ProviderId.NONE, DID1, Device.Type.SWITCH,
- "TESTMF", "TESTHW", "TESTSW", "TESTSN", new ChassisId());
- Device d2 = new DefaultDevice(ProviderId.NONE, DID2, Device.Type.SWITCH,
- "TESTMF", "TESTHW", "TESTSW", "TESTSN", new ChassisId());
- devices.put(DID1, d1);
- devices.put(DID2, d2);
- pd1 = new DefaultPort(d1, PortNumber.portNumber(1), true);
- pd2 = new DefaultPort(d1, PortNumber.portNumber(2), true);
- pd3 = new DefaultPort(d2, PortNumber.portNumber(1), true);
- pd4 = new DefaultPort(d2, PortNumber.portNumber(2), true);
-
- ports.putAll(DID1, Lists.newArrayList(pd1, pd2));
- ports.putAll(DID2, Lists.newArrayList(pd3, pd4));
- }
-
- private void putDevice(Device device) {
- DeviceId deviceId = device.id();
- devices.put(deviceId, device);
- }
-
- private void putPorts(DeviceId did, Port...ports) {
- this.ports.putAll(did, Lists.newArrayList(ports));
- }
-
- @Override
- public int getDeviceCount() {
- return devices.values().size();
- }
-
- @Override
- public Iterable<Device> getDevices() {
- return ImmutableList.copyOf(devices.values());
- }
-
- @Override
- public Device getDevice(DeviceId deviceId) {
- return devices.get(deviceId);
- }
-
- @Override
- public MastershipRole getRole(DeviceId deviceId) {
- return MastershipRole.MASTER;
- }
-
- @Override
- public List<Port> getPorts(DeviceId deviceId) {
- return ports.get(deviceId);
- }
-
- @Override
- public Port getPort(DeviceId deviceId, PortNumber portNumber) {
- for (Port p : ports.get(deviceId)) {
- if (p.number().equals(portNumber)) {
- return p;
- }
- }
- return null;
- }
-
- @Override
- public boolean isAvailable(DeviceId deviceId) {
- return true;
- }
-
- @Override
- public void addListener(DeviceListener listener) {
- deviceListener = listener;
-
- }
-
- @Override
- public void removeListener(DeviceListener listener) {
-
- }
- }
-
- private final class TestMasterShipService implements MastershipService {
-
- @Override
- public MastershipRole getLocalRole(DeviceId deviceId) {
- return MastershipRole.MASTER;
- }
-
- @Override
- public CompletableFuture<MastershipRole> requestRoleFor(DeviceId deviceId) {
- return CompletableFuture.completedFuture(null);
- }
-
- @Override
- public CompletableFuture<Void> relinquishMastership(DeviceId deviceId) {
- return null;
- }
-
- @Override
- public NodeId getMasterFor(DeviceId deviceId) {
- return null;
- }
-
- @Override
- public Set<DeviceId> getDevicesOf(NodeId nodeId) {
- return null;
- }
-
- @Override
- public void addListener(MastershipListener listener) {
-
- }
-
- @Override
- public void removeListener(MastershipListener listener) {
-
- }
-
- @Override
- public RoleInfo getNodesFor(DeviceId deviceId) {
- return new RoleInfo(new NodeId("foo"), Collections.<NodeId>emptyList());
- }
- }
-
-
- private class TestLinkService extends LinkServiceAdapter {
- }
-
- private final class TestNetworkConfigRegistry
- extends NetworkConfigRegistryAdapter {
- @SuppressWarnings("unchecked")
- @Override
- public <S, C extends Config<S>> C getConfig(S subj, Class<C> configClass) {
- if (configClass == SuppressionConfig.class) {
- return (C) cfg;
- } else if (configClass == LinkDiscoveryFromDevice.class) {
- return (C) new LinkDiscoveryFromDevice() {
- @Override
- public boolean enabled() {
- return !deviceBlacklist.contains(subj);
- }
- };
- } else if (configClass == LinkDiscoveryFromPort.class) {
- return (C) new LinkDiscoveryFromPort() {
- @Override
- public boolean enabled() {
- return !portBlacklist.contains(subj);
- }
- };
- } else {
- return null;
- }
- }
-
- @Override
- public void addListener(NetworkConfigListener listener) {
- configListener = listener;
- }
- }
-
- private final class TestSuppressionConfig extends SuppressionConfig {
- private Set<Device.Type> deviceTypes = new HashSet<>(DEFAULT_RULES.getSuppressedDeviceType());
- private Map<String, String> annotation = new HashMap<>(DEFAULT_RULES.getSuppressedAnnotation());
-
- @Override
- public Set<Device.Type> deviceTypes() {
- return ImmutableSet.copyOf(deviceTypes);
- }
-
- @Override
- public SuppressionConfig deviceTypes(Set<Device.Type> deviceTypes) {
- this.deviceTypes = ImmutableSet.copyOf(deviceTypes);
- return this;
- }
-
- @Override
- public Map<String, String> annotation() {
- return ImmutableMap.copyOf(annotation);
- }
-
- @Override
- public SuppressionConfig annotation(Map<String, String> annotation) {
- this.annotation = ImmutableMap.copyOf(annotation);
- return this;
- }
- }
-}
diff --git a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionConfigTest.java b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionConfigTest.java
deleted file mode 100644
index 85061ca0..00000000
--- a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionConfigTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.onosproject.provider.lldp.impl;
-
-import static org.junit.Assert.*;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.TestApplicationId;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.config.ConfigApplyDelegate;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-public class SuppressionConfigTest {
- private static final String APP_NAME = "SuppressionConfigTest";
- private static final TestApplicationId APP_ID = new TestApplicationId(APP_NAME);
- private static final DeviceId DEVICE_ID_1 = DeviceId.deviceId("of:1111000000000000");
- private static final DeviceId DEVICE_ID_2 = DeviceId.deviceId("of:2222000000000000");
- private static final Device.Type DEVICE_TYPE_1 = Device.Type.ROADM;
- private static final Device.Type DEVICE_TYPE_2 = Device.Type.FIBER_SWITCH;
- private static final String ANNOTATION_KEY_1 = "no_lldp";
- private static final String ANNOTATION_VALUE_1 = "true";
- private static final String ANNOTATION_KEY_2 = "sendLLDP";
- private static final String ANNOTATION_VALUE_2 = "false";
-
- private SuppressionConfig cfg;
-
- @Before
- public void setUp() throws Exception {
- ConfigApplyDelegate delegate = config -> { };
- ObjectMapper mapper = new ObjectMapper();
- cfg = new SuppressionConfig();
- cfg.init(APP_ID, LldpLinkProvider.CONFIG_KEY, JsonNodeFactory.instance.objectNode(), mapper, delegate);
- }
-
- @Test
- public void testDeviceTypes() {
- Set<Device.Type> inputTypes = new HashSet<Device.Type>() { {
- add(DEVICE_TYPE_1);
- add(DEVICE_TYPE_2);
- } };
-
- assertNotNull(cfg.deviceTypes(inputTypes));
-
- Set<Device.Type> outputTypes = cfg.deviceTypes();
- assertTrue(outputTypes.contains(DEVICE_TYPE_1));
- assertTrue(outputTypes.contains(DEVICE_TYPE_2));
- assertEquals(outputTypes.size(), 2);
- }
-
- @Test
- public void testDeviceAnnotation() {
- Map<String, String> inputMap = new HashMap<String, String>() { {
- put(ANNOTATION_KEY_1, ANNOTATION_VALUE_1);
- put(ANNOTATION_KEY_2, ANNOTATION_VALUE_2);
- } };
-
- assertNotNull(cfg.annotation(inputMap));
-
- Map<String, String> outputMap = cfg.annotation();
- assertEquals(outputMap.get(ANNOTATION_KEY_1), ANNOTATION_VALUE_1);
- assertEquals(outputMap.get(ANNOTATION_KEY_2), ANNOTATION_VALUE_2);
- assertEquals(outputMap.size(), 2);
- }
-
-}
diff --git a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java
deleted file mode 100644
index c18c248e..00000000
--- a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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.lldp.impl;
-
-import static org.junit.Assert.*;
-import static org.onosproject.net.DeviceId.deviceId;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.ChassisId;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.DefaultPort;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.provider.ProviderId;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-
-public class SuppressionRulesTest {
-
- private static final DeviceId NON_SUPPRESSED_DID = deviceId("of:1111000000000000");
- private static final DeviceId SUPPRESSED_DID = deviceId("of:2222000000000000");
- private static final ProviderId PID = new ProviderId("of", "foo");
- private static final String MFR = "whitebox";
- private static final String HW = "1.1.x";
- private static final String SW1 = "3.8.1";
- private static final String SN = "43311-12345";
- private static final ChassisId CID = new ChassisId();
-
- private static final PortNumber P1 = PortNumber.portNumber(1);
-
- private SuppressionRules rules;
-
- @Before
- public void setUp() throws Exception {
- rules = new SuppressionRules(ImmutableSet.of(Device.Type.ROADM),
- ImmutableMap.of("no-lldp", SuppressionRules.ANY_VALUE,
- "sendLLDP", "false"));
- }
-
- @Test
- public void testSuppressedDeviceType() {
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.ROADM,
- MFR, HW, SW1, SN, CID);
- assertTrue(rules.isSuppressed(device));
- }
-
- @Test
- public void testSuppressedDeviceAnnotation() {
- Annotations annotation = DefaultAnnotations.builder()
- .set("no-lldp", "random")
- .build();
-
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.SWITCH,
- MFR, HW, SW1, SN, CID, annotation);
- assertTrue(rules.isSuppressed(device));
- }
-
- @Test
- public void testSuppressedDeviceAnnotationExact() {
- Annotations annotation = DefaultAnnotations.builder()
- .set("sendLLDP", "false")
- .build();
-
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.SWITCH,
- MFR, HW, SW1, SN, CID, annotation);
- assertTrue(rules.isSuppressed(device));
- }
-
- @Test
- public void testNotSuppressedDevice() {
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.SWITCH,
- MFR, HW, SW1, SN, CID);
- assertFalse(rules.isSuppressed(device));
- }
-
- @Test
- public void testSuppressedPortAnnotation() {
- Annotations annotation = DefaultAnnotations.builder()
- .set("no-lldp", "random")
- .build();
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.SWITCH,
- MFR, HW, SW1, SN, CID);
- Port port = new DefaultPort(device, P1, true, annotation);
-
- assertTrue(rules.isSuppressed(port));
- }
-
- @Test
- public void testSuppressedPortAnnotationExact() {
- Annotations annotation = DefaultAnnotations.builder()
- .set("sendLLDP", "false")
- .build();
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.SWITCH,
- MFR, HW, SW1, SN, CID);
- Port port = new DefaultPort(device, P1, true, annotation);
-
- assertTrue(rules.isSuppressed(port));
- }
-
- @Test
- public void testNotSuppressedPort() {
- Device device = new DefaultDevice(PID,
- NON_SUPPRESSED_DID,
- Device.Type.SWITCH,
- MFR, HW, SW1, SN, CID);
- Port port = new DefaultPort(device, P1, true);
-
- assertFalse(rules.isSuppressed(port));
- }
-}
diff --git a/framework/src/onos/providers/netcfghost/pom.xml b/framework/src/onos/providers/netcfghost/pom.xml
deleted file mode 100644
index 9d106921..00000000
--- a/framework/src/onos/providers/netcfghost/pom.xml
+++ /dev/null
@@ -1,65 +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/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>onos-providers</artifactId>
- <groupId>org.onosproject</groupId>
- <version>1.4.0-rc1</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>onos-netcfg-host-provider</artifactId>
- <packaging>bundle</packaging>
-
- <description>
- Host provider that uses network config service to discover hosts.
- </description>
- <url>http://onosproject.org</url>
-
- <properties>
- <onos.app.name>org.onosproject.netcfghostprovider</onos.app.name>
- <onos.app.origin>ON.Lab</onos.app.origin>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-osgi</artifactId>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java b/framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java
deleted file mode 100644
index 767cfb7f..00000000
--- a/framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright 2014-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.netcfghost;
-
-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.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistry;
-import org.onosproject.net.config.basics.BasicHostConfig;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import java.util.Set;
-
-/**
- * Host provider that uses network config service to discover hosts.
- */
-@Component(immediate = true)
-public class NetworkConfigHostProvider extends AbstractProvider implements HostProvider {
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected NetworkConfigRegistry networkConfigRegistry;
-
- private static final String APP_NAME = "org.onosproject.provider.netcfghost";
- private ApplicationId appId;
- protected HostProviderService providerService;
-
- private final Logger log = LoggerFactory.getLogger(getClass());
- private final InternalNetworkConfigListener networkConfigListener =
- new InternalNetworkConfigListener();
-
- /**
- * Creates an network config host location provider.
- */
- public NetworkConfigHostProvider() {
- super(new ProviderId("host", APP_NAME));
- }
-
- @Activate
- protected void activate() {
- appId = coreService.registerApplication(APP_NAME);
- providerService = providerRegistry.register(this);
- networkConfigRegistry.addListener(networkConfigListener);
- readInitialConfig();
- log.info("Started");
- }
-
- @Deactivate
- protected void deactivate() {
- networkConfigRegistry.removeListener(networkConfigListener);
- providerRegistry.unregister(this);
- providerService = null;
- log.info("Stopped");
- }
-
- @Override
- public void triggerProbe(Host host) {
- /*
- * Note: In CORD deployment, we assume that all hosts are configured.
- * Therefore no probe is required.
- */
- }
-
- /**
- * Adds host information.
- * IP information will be appended if host exists.
- *
- * @param mac MAC address of the host
- * @param vlan VLAN ID of the host
- * @param hloc Location of the host
- * @param ips Set of IP addresses of the host
- */
- protected void addHost(MacAddress mac, VlanId vlan, HostLocation hloc, Set<IpAddress> ips) {
- HostId hid = HostId.hostId(mac, vlan);
- HostDescription desc = new DefaultHostDescription(mac, vlan, hloc, ips);
- providerService.hostDetected(hid, desc, false);
- }
-
- /**
- * Updates host information.
- * IP information will be replaced if host exists.
- *
- * @param mac MAC address of the host
- * @param vlan VLAN ID of the host
- * @param hloc Location of the host
- * @param ips Set of IP addresses of the host
- */
- protected void updateHost(MacAddress mac, VlanId vlan, HostLocation hloc, Set<IpAddress> ips) {
- HostId hid = HostId.hostId(mac, vlan);
- HostDescription desc = new DefaultHostDescription(mac, vlan, hloc, ips);
- providerService.hostDetected(hid, desc, true);
- }
-
- /**
- * Removes host information.
- *
- * @param mac MAC address of the host
- * @param vlan VLAN ID of the host
- */
- protected void removeHost(MacAddress mac, VlanId vlan) {
- HostId hid = HostId.hostId(mac, vlan);
- providerService.hostVanished(hid);
- }
-
- private void readInitialConfig() {
- networkConfigRegistry.getSubjects(HostId.class).forEach(hostId -> {
- MacAddress mac = hostId.mac();
- VlanId vlan = hostId.vlanId();
- BasicHostConfig hostConfig =
- networkConfigRegistry.getConfig(hostId, BasicHostConfig.class);
- Set<IpAddress> ipAddresses = hostConfig.ipAddresses();
- ConnectPoint location = hostConfig.location();
- HostLocation hloc = new HostLocation(location, System.currentTimeMillis());
- addHost(mac, vlan, hloc, ipAddresses);
- });
- }
-
- private class InternalNetworkConfigListener implements NetworkConfigListener {
- @Override
- public void event(NetworkConfigEvent event) {
- // Do not process non-host, register and unregister events
- if (!event.configClass().equals(BasicHostConfig.class) ||
- event.type() == NetworkConfigEvent.Type.CONFIG_REGISTERED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UNREGISTERED) {
- return;
- }
-
- HostId hostId = (HostId) event.subject();
- MacAddress mac = hostId.mac();
- VlanId vlan = hostId.vlanId();
- BasicHostConfig hostConfig =
- networkConfigRegistry.getConfig(hostId, BasicHostConfig.class);
- Set<IpAddress> ipAddresses = null;
- HostLocation hloc = null;
-
- // Note: There will be no config presented in the CONFIG_REMOVE case
- if (hostConfig != null) {
- ipAddresses = hostConfig.ipAddresses();
- ConnectPoint location = hostConfig.location();
- hloc = new HostLocation(location, System.currentTimeMillis());
- }
-
- switch (event.type()) {
- case CONFIG_ADDED:
- addHost(mac, vlan, hloc, ipAddresses);
- break;
- case CONFIG_UPDATED:
- updateHost(mac, vlan, hloc, ipAddresses);
- break;
- case CONFIG_REMOVED:
- removeHost(mac, vlan);
- break;
- default:
- break;
- }
- }
- }
-}
diff --git a/framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/package-info.java b/framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/package-info.java
deleted file mode 100644
index a56b9a80..00000000
--- a/framework/src/onos/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2014-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.
- */
-
-/**
- * Host provider that uses network config service to discover hosts.
- */
-package org.onosproject.provider.netcfghost;
diff --git a/framework/src/onos/providers/netcfghost/src/test/java/org/onosproject/provider/netcfghost/NetworkConfigHostProviderTest.java b/framework/src/onos/providers/netcfghost/src/test/java/org/onosproject/provider/netcfghost/NetworkConfigHostProviderTest.java
deleted file mode 100644
index a4f057cf..00000000
--- a/framework/src/onos/providers/netcfghost/src/test/java/org/onosproject/provider/netcfghost/NetworkConfigHostProviderTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2014-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.netcfghost;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.provider.AbstractProviderService;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-
-/**
- * Set of tests of the host location provider for CORD.
- */
-public class NetworkConfigHostProviderTest {
- private NetworkConfigHostProvider provider = new NetworkConfigHostProvider();
- private MockHostProviderService providerService = new MockHostProviderService(provider);
-
- private MacAddress mac = MacAddress.valueOf("c0:ff:ee:c0:ff:ee");
- private VlanId vlan = VlanId.vlanId(VlanId.UNTAGGED);
- private DeviceId deviceId = DeviceId.deviceId("of:0000000000000001");
- private PortNumber port = PortNumber.portNumber(5);
- private HostLocation hloc = new HostLocation(deviceId, port, 100);
- private Set<IpAddress> ips = new HashSet<>();
- private HostId hostId = HostId.hostId(mac, vlan);
- private HostDescription hostDescription;
-
- @Before
- public void setUp() {
- provider.providerService = providerService;
-
- // Initialize test variables
- ips.add(IpAddress.valueOf("10.0.0.1"));
- ips.add(IpAddress.valueOf("192.168.0.1"));
- hostDescription = new DefaultHostDescription(mac, vlan, hloc, ips);
- }
-
- @Test
- public void testAddHost() throws Exception {
- provider.addHost(mac, vlan, hloc, ips);
- assertThat(providerService.hostId, is(hostId));
- assertThat(providerService.hostDescription, is(hostDescription));
- assertThat(providerService.event, is("hostDetected"));
- providerService.clear();
- }
-
- @Test
- public void testUpdateHost() throws Exception {
- provider.updateHost(mac, vlan, hloc, ips);
- assertThat(providerService.hostId, is(hostId));
- assertThat(providerService.hostDescription, is(hostDescription));
- assertThat(providerService.event, is("hostDetected"));
- providerService.clear();
- }
-
- @Test
- public void testRemoveHost() throws Exception {
- provider.removeHost(mac, vlan);
- assertThat(providerService.hostId, is(hostId));
- assertNull(providerService.hostDescription);
- assertThat(providerService.event, is("hostVanished"));
- providerService.clear();
- }
-
- /**
- * Mock HostProviderService.
- */
- private class MockHostProviderService
- extends AbstractProviderService<HostProvider>
- implements HostProviderService {
- private HostId hostId = null;
- private HostDescription hostDescription = null;
- private String event = null;
-
- public MockHostProviderService(HostProvider provider) {
- super(provider);
- }
-
- @Override
- public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
- this.hostId = hostId;
- this.hostDescription = hostDescription;
- this.event = "hostDetected";
- }
-
- @Override
- public void hostVanished(HostId hostId) {
- this.hostId = hostId;
- this.event = "hostVanished";
- }
-
- @Override
- public void removeIpFromHost(HostId hostId, IpAddress ipAddress) {
- // Note: This method is never used.
- }
-
- public void clear() {
- this.hostId = null;
- this.hostDescription = null;
- this.event = null;
- }
- }
-}
diff --git a/framework/src/onos/providers/netconf/app/app.xml b/framework/src/onos/providers/netconf/app/app.xml
deleted file mode 100644
index d920d240..00000000
--- a/framework/src/onos/providers/netconf/app/app.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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.
- -->
-<app name="org.onosproject.netconf" origin="ON.Lab" version="${project.version}"
- featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
- features="${project.artifactId}">
- <description>${project.description}</description>
-
- <artifact>mvn:${project.groupId}/onos-netconf-rfc/${project.version}</artifact>
- <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>
diff --git a/framework/src/onos/providers/netconf/app/features.xml b/framework/src/onos/providers/netconf/app/features.xml
deleted file mode 100644
index e032f4da..00000000
--- a/framework/src/onos/providers/netconf/app/features.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
- ~ 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.
- -->
-<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:io.netty/netty/3.9.2.Final</bundle>
- <bundle>mvn:${project.groupId}/onos-netconf-api/${project.version}</bundle>
- <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>
-
diff --git a/framework/src/onos/providers/netconf/app/pom.xml b/framework/src/onos/providers/netconf/app/pom.xml
deleted file mode 100644
index 41fbd1f5..00000000
--- a/framework/src/onos/providers/netconf/app/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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.
- -->
-<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-netconf-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-netconf-app</artifactId>
- <packaging>pom</packaging>
-
- <description>NetConf protocol southbound providers</description>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-netconf-provider-device</artifactId>
- <version>${project.version}</version>
- </dependency>
- <!-- Add other dependencies here as more bundles are added to the app -->
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/netconf/device/pom.xml b/framework/src/onos/providers/netconf/device/pom.xml
deleted file mode 100644
index 9319a509..00000000
--- a/framework/src/onos/providers/netconf/device/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.
- -->
-<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-netconf-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-netconf-provider-device</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS Netconf protocol device provider</description>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-netconf-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-netconf-ctl</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
deleted file mode 100644
index d12c6474..00000000
--- a/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * 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.netconf.device.impl;
-
-import com.google.common.base.Preconditions;
-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.onlab.packet.ChassisId;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.incubator.net.config.basics.ConfigException;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.config.ConfigFactory;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistry;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfDevice;
-import org.onosproject.netconf.NetconfDeviceInfo;
-import org.onosproject.netconf.NetconfDeviceListener;
-import org.slf4j.Logger;
-
-import java.util.Map;
-
-import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider which uses an NETCONF controller to detect device.
- */
-@Component(immediate = true)
-public class NetconfDeviceProvider extends AbstractProvider
- implements DeviceProvider {
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceService deviceService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected NetconfController controller; //where is initiated ?
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected NetworkConfigRegistry cfgService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
-
- private DeviceProviderService providerService;
- private NetconfDeviceListener innerNodeListener = new InnerNetconfDeviceListener();
- protected static final String ISNOTNULL = "NetconfDeviceInfo is not null";
- private static final String UNKNOWN = "unknown";
-
- private final ConfigFactory factory =
- new ConfigFactory<ApplicationId, NetconfProviderConfig>(APP_SUBJECT_FACTORY,
- NetconfProviderConfig.class,
- "devices",
- true) {
- @Override
- public NetconfProviderConfig createConfig() {
- return new NetconfProviderConfig();
- }
- };
- private final NetworkConfigListener cfgLister = new InternalNetworkConfigListener();
- private ApplicationId appId;
-
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- cfgService.registerConfigFactory(factory);
- cfgService.addListener(cfgLister);
- controller.addDeviceListener(innerNodeListener);
- connectExistingDevices();
- log.info("Started");
- }
-
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- providerService = null;
- cfgService.unregisterConfigFactory(factory);
- log.info("Stopped");
- }
-
- public NetconfDeviceProvider() {
- super(new ProviderId("netconf", "org.onosproject.netconf.provider.device"));
- }
-
- @Override
- public void triggerProbe(DeviceId deviceId) {
- // TODO: This will be implemented later.
- log.info("Triggering probe on device {}", deviceId);
- }
-
- @Override
- public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public boolean isReachable(DeviceId deviceId) {
- Map<DeviceId, NetconfDevice> devices = controller.getDevicesMap();
-
- NetconfDevice netconfDevice = null;
- for (DeviceId key : devices.keySet()) {
- if (key.equals(deviceId)) {
- netconfDevice = controller.getDevicesMap().get(key);
- }
- }
- if (netconfDevice == null) {
- log.warn("BAD REQUEST: the requested device id: "
- + deviceId.toString()
- + " is not associated to any NETCONF Device");
- return false;
- }
- return netconfDevice.isActive();
- }
-
- private class InnerNetconfDeviceListener implements NetconfDeviceListener {
-
- @Override
- public void deviceAdded(NetconfDeviceInfo nodeId) {
- Preconditions.checkNotNull(nodeId, ISNOTNULL);
- DeviceId deviceId = nodeId.getDeviceId();
- //TODO filter for not netconf devices
- //Netconf configuration object
- ChassisId cid = new ChassisId();
- String ipAddress = nodeId.ip().toString();
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("ipaddress", ipAddress).build();
- DeviceDescription deviceDescription = new DefaultDeviceDescription(
- deviceId.uri(),
- Device.Type.SWITCH,
- UNKNOWN, UNKNOWN,
- UNKNOWN, UNKNOWN,
- cid,
- annotations);
- providerService.deviceConnected(deviceId, deviceDescription);
-
- }
-
- @Override
- public void deviceRemoved(NetconfDeviceInfo nodeId) {
- Preconditions.checkNotNull(nodeId, ISNOTNULL);
- DeviceId deviceId = nodeId.getDeviceId();
- providerService.deviceDisconnected(deviceId);
-
- }
- }
-
- private void connectExistingDevices() {
- //TODO consolidate
- appId = coreService.registerApplication("org.onosproject.netconf");
- connectDevices();
- }
-
- private void connectDevices() {
- NetconfProviderConfig cfg = cfgService.getConfig(appId, NetconfProviderConfig.class);
- if (cfg != null) {
- log.info("cfg {}", cfg);
- try {
- cfg.getDevicesAddresses().stream().forEach(addr -> controller
- .connectDevice(new NetconfDeviceInfo(addr.name(),
- addr.password(),
- addr.ip(),
- addr.port())));
- } catch (ConfigException e) {
- log.error("Cannot read config error " + e);
- }
- }
- }
-
- private class InternalNetworkConfigListener implements NetworkConfigListener {
-
-
- @Override
- public void event(NetworkConfigEvent event) {
- connectDevices();
- }
-
- @Override
- public boolean isRelevant(NetworkConfigEvent event) {
- //TODO refactor
- return event.configClass().equals(NetconfProviderConfig.class) &&
- (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED);
- }
- }
-}
diff --git a/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java b/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java
deleted file mode 100644
index 7ae116eb..00000000
--- a/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.netconf.device.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.annotations.Beta;
-import com.google.common.collect.Sets;
-import org.onlab.packet.IpAddress;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.incubator.net.config.basics.ConfigException;
-import org.onosproject.net.config.Config;
-
-import java.util.Set;
-
-/**
- * Configuration for Netconf provider.
- */
-@Beta
-public class NetconfProviderConfig extends Config<ApplicationId> {
-
- public static final String CONFIG_VALUE_ERROR = "Error parsing config value";
- private static final String IP = "ip";
- private static final int DEFAULT_TCP_PORT = 830;
- private static final String PORT = "port";
- private static final String NAME = "name";
- private static final String PASSWORD = "password";
-
- public Set<NetconfDeviceAddress> getDevicesAddresses() throws ConfigException {
- Set<NetconfDeviceAddress> devicesAddresses = Sets.newHashSet();
-
- try {
- for (JsonNode node : array) {
- String ip = node.path(IP).asText();
- IpAddress ipAddr = ip.isEmpty() ? null : IpAddress.valueOf(ip);
- int port = node.path(PORT).asInt(DEFAULT_TCP_PORT);
- String name = node.path(NAME).asText();
- String password = node.path(PASSWORD).asText();
- devicesAddresses.add(new NetconfDeviceAddress(ipAddr, port, name, password));
-
- }
- } catch (IllegalArgumentException e) {
- throw new ConfigException(CONFIG_VALUE_ERROR, e);
- }
-
- return devicesAddresses;
- }
-
- public class NetconfDeviceAddress {
- private final IpAddress ip;
- private final int port;
- private final String name;
- private final String password;
-
- public NetconfDeviceAddress(IpAddress ip, int port, String name, String password) {
- this.ip = ip;
- this.port = port;
- this.name = name;
- this.password = password;
- }
-
- public IpAddress ip() {
- return ip;
- }
-
- public int port() {
- return port;
- }
-
- public String name() {
- return name;
- }
-
- public String password() {
- return password;
- }
- }
-
-
-}
diff --git a/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/package-info.java b/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/package-info.java
deleted file mode 100644
index 583aeaa2..00000000
--- a/framework/src/onos/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Provider that uses Netconf capability request as a means of infrastructure device discovery.
- */
-package org.onosproject.provider.netconf.device.impl; \ No newline at end of file
diff --git a/framework/src/onos/providers/netconf/pom.xml b/framework/src/onos/providers/netconf/pom.xml
deleted file mode 100644
index ca044a2d..00000000
--- a/framework/src/onos/providers/netconf/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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.
- -->
-<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-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-netconf-providers</artifactId>
- <packaging>pom</packaging>
-
- <description>ONOS Netconf protocol adapters</description>
-
- <modules>
- <module>device</module>
- <module>app</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/null/pom.xml b/framework/src/onos/providers/null/pom.xml
deleted file mode 100644
index ef2e3347..00000000
--- a/framework/src/onos/providers/null/pom.xml
+++ /dev/null
@@ -1,61 +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-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-null-provider</artifactId>
- <packaging>bundle</packaging>
-
- <description>Null southbound providers</description>
-
- <properties>
- <onos.app.name>org.onosproject.null</onos.app.name>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.karaf.shell</groupId>
- <artifactId>org.apache.karaf.shell.console</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-cli</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/AggLinkTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/AggLinkTopologySimulator.java
deleted file mode 100644
index 2d09ebed..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/AggLinkTopologySimulator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.nil;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Simple triangle topology with multiple links between same devices.
- */
-public class AggLinkTopologySimulator extends CentipedeTopologySimulator {
-
- @Override
- protected void processTopoShape(String shape) {
- super.processTopoShape(shape);
- infrastructurePorts = 2 * deviceCount - 1;
- }
-
- @Override
- public void setUpTopology() {
- checkArgument(deviceCount > 2, "There must be at least 3 devices");
- super.setUpTopology();
- }
-
- @Override
- protected void createLinks() {
- int srcPortOffset = deviceCount + 1;
- for (int i = 0, n = deviceCount; i < n; i++) {
- int dstPortOffset = 1;
- for (int j = 0; j <= i; j++) {
- createLink(i, (i + 1) % n, srcPortOffset + j, dstPortOffset + j);
- }
- srcPortOffset = dstPortOffset + i + 1;
- }
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/CentipedeTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/CentipedeTopologySimulator.java
deleted file mode 100644
index 5234d448..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/CentipedeTopologySimulator.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.nil;
-
-/**
- * Linear topology with hosts on every device.
- */
-public class CentipedeTopologySimulator extends LinearTopologySimulator {
-
- /**
- * Creates simulated hosts.
- */
- protected void createHosts() {
- deviceIds.forEach(id -> createHosts(id, infrastructurePorts));
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/ConfiguredTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/ConfiguredTopologySimulator.java
deleted file mode 100644
index ad57bf3f..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/ConfiguredTopologySimulator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.nil;
-
-/**
- * Topology simulator which operates on topology configured via the REST API
- * config service.
- */
-public class ConfiguredTopologySimulator extends TopologySimulator {
-
- @Override
- protected void createDevices() {
- deviceService.getDevices()
- .forEach(device -> deviceProviderService
- .deviceConnected(device.id(), description(device)));
- }
-
- @Override
- protected void createLinks() {
- linkService.getLinks()
- .forEach(link -> linkProviderService
- .linkDetected(description(link)));
- }
-
- @Override
- protected void createHosts() {
- hostService.getHosts()
- .forEach(host -> hostProviderService
- .hostDetected(host.id(), description(host)));
- }
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java
deleted file mode 100644
index beb06c33..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.nil;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Linear topology simulator.
- */
-public class LinearTopologySimulator extends TopologySimulator {
-
- @Override
- protected void processTopoShape(String shape) {
- super.processTopoShape(shape);
- deviceCount = (topoShape.length == 1) ? deviceCount : Integer.parseInt(topoShape[1]);
- }
-
- @Override
- public void setUpTopology() {
- checkArgument(deviceCount > 1, "There must be at least 2 devices");
-
- prepareForDeviceEvents(deviceCount);
- createDevices();
- waitForDeviceEvents();
-
- createLinks();
- createHosts();
- }
-
- @Override
- protected void createLinks() {
- int portOffset = 1;
- for (int i = 0, n = deviceCount - 1; i < n; i++) {
- createLink(i, i + 1, portOffset, 1);
- portOffset = 2;
- }
- }
-
- @Override
- protected void createHosts() {
- createHosts(deviceIds.get(0), infrastructurePorts);
- createHosts(deviceIds.get(deviceCount - 1), infrastructurePorts);
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/MeshTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/MeshTopologySimulator.java
deleted file mode 100644
index d3f2d6ad..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/MeshTopologySimulator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.nil;
-
-/**
- * Full mesh topology with hosts at each device.
- */
-public class MeshTopologySimulator extends TopologySimulator {
-
- @Override
- protected void processTopoShape(String shape) {
- super.processTopoShape(shape);
- // FIXME: implement this
- }
-
- @Override
- public void setUpTopology() {
- // FIXME: implement this
- // checkArgument(FIXME, "There must be at least ...");
- super.setUpTopology();
- }
-
- @Override
- protected void createLinks() {
- }
-
- @Override
- protected void createHosts() {
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
deleted file mode 100644
index 9b01d12a..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.nil;
-
-import com.google.common.collect.Sets;
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.util.Timer;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.flow.CompletedBatchOperation;
-import org.onosproject.net.flow.DefaultFlowEntry;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.FlowRuleBatchEntry;
-import org.onosproject.net.flow.FlowRuleBatchOperation;
-import org.onosproject.net.flow.FlowRuleProvider;
-import org.onosproject.net.flow.FlowRuleProviderService;
-import org.slf4j.Logger;
-
-import java.util.Collections;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.TimeUnit;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Null provider to accept any flow and report them.
- */
-class NullFlowRuleProvider extends NullProviders.AbstractNullProvider
- implements FlowRuleProvider {
-
- private final Logger log = getLogger(getClass());
-
- private ConcurrentMap<DeviceId, Set<FlowEntry>> flowTable = new ConcurrentHashMap<>();
-
- private FlowRuleProviderService providerService;
-
- private HashedWheelTimer timer = Timer.getTimer();
- private Timeout timeout;
-
- /**
- * Starts the flow rule provider simulation.
- *
- * @param providerService flow rule provider service
- */
- void start(FlowRuleProviderService providerService) {
- this.providerService = providerService;
- timeout = timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS);
- }
-
- /**
- * Stops the flow rule provider simulation.
- */
- void stop() {
- timeout.cancel();
- }
-
- @Override
- public void applyFlowRule(FlowRule... flowRules) {
- // FIXME: invoke executeBatch
- }
-
- @Override
- public void removeFlowRule(FlowRule... flowRules) {
- // FIXME: invoke executeBatch
- }
-
- @Override
- public void removeRulesById(ApplicationId id, FlowRule... flowRules) {
- throw new UnsupportedOperationException("Cannot remove by appId from null provider");
- }
-
- @Override
- public void executeBatch(FlowRuleBatchOperation batch) {
- // TODO: consider checking mastership
- Set<FlowEntry> entries =
- flowTable.getOrDefault(batch.deviceId(),
- Sets.newConcurrentHashSet());
- for (FlowRuleBatchEntry fbe : batch.getOperations()) {
- switch (fbe.operator()) {
- case ADD:
- entries.add(new DefaultFlowEntry(fbe.target()));
- break;
- case REMOVE:
- entries.remove(new DefaultFlowEntry(fbe.target()));
- break;
- case MODIFY:
- FlowEntry entry = new DefaultFlowEntry(fbe.target());
- entries.remove(entry);
- entries.add(entry);
- break;
- default:
- log.error("Unknown flow operation: {}", fbe);
- }
- }
- flowTable.put(batch.deviceId(), entries);
- CompletedBatchOperation op =
- new CompletedBatchOperation(true, Collections.emptySet(),
- batch.deviceId());
- providerService.batchOperationCompleted(batch.id(), op);
- }
-
- // Periodically reports flow rule statistics.
- private class StatisticTask implements TimerTask {
- @Override
- public void run(Timeout to) throws Exception {
- for (DeviceId devId : flowTable.keySet()) {
- Set<FlowEntry> entries =
- flowTable.getOrDefault(devId, Collections.emptySet());
- providerService.pushFlowMetrics(devId, entries);
- }
- timeout = timer.newTimeout(to.getTask(), 5, TimeUnit.SECONDS);
- }
- }
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
deleted file mode 100644
index 07a137e9..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * 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.nil;
-
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.ICMP;
-import org.onlab.util.Timer;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceAdminService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.packet.DefaultInboundPacket;
-import org.onosproject.net.packet.DefaultPacketContext;
-import org.onosproject.net.packet.InboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.net.packet.PacketProvider;
-import org.onosproject.net.packet.PacketProviderService;
-import org.slf4j.Logger;
-
-import java.nio.ByteBuffer;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import static com.google.common.collect.ImmutableList.copyOf;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.onosproject.net.MastershipRole.MASTER;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider which generates simulated packets and acts as a sink for outbound
- * packets. To be used for benchmarking only.
- */
-class NullPacketProvider extends NullProviders.AbstractNullProvider
- implements PacketProvider {
-
- private static final int INITIAL_DELAY = 5;
- private final Logger log = getLogger(getClass());
-
- // Arbitrary host src/dst
- private static final int SRC_HOST = 2;
- private static final int DST_HOST = 5;
-
- // Time between event firing, in milliseconds
- private int delay;
-
- // TODO: use host service to pick legitimate hosts connected to devices
- private HostService hostService;
- private PacketProviderService providerService;
-
- private List<Device> devices;
- private int currentDevice = 0;
-
- private HashedWheelTimer timer = Timer.getTimer();
- private Timeout timeout;
-
- /**
- * Starts the packet generation process.
- *
- * @param packetRate packets per second
- * @param hostService host service
- * @param deviceService device service
- * @param providerService packet provider service
- */
- void start(int packetRate, HostService hostService,
- DeviceAdminService deviceService,
- PacketProviderService providerService) {
- this.hostService = hostService;
- this.providerService = providerService;
-
- this.devices = copyOf(deviceService.getDevices()).stream()
- .filter(d -> deviceService.getRole(d.id()) == MASTER)
- .collect(Collectors.toList());
-
- adjustRate(packetRate);
- timeout = timer.newTimeout(new PacketDriverTask(), INITIAL_DELAY, SECONDS);
- }
-
- /**
- * Adjusts packet rate.
- *
- * @param packetRate new packet rate
- */
- void adjustRate(int packetRate) {
- delay = 1000 / packetRate;
- log.info("Settings: packetRate={}, delay={}", packetRate, delay);
- }
-
- /**
- * Stops the packet generation process.
- */
- void stop() {
- if (timeout != null) {
- timeout.cancel();
- }
- }
-
- @Override
- public void emit(OutboundPacket packet) {
- // We don't have a network to emit to. Keep a counter here, maybe?
- }
-
- /**
- * Generates packet events at a given rate.
- */
- private class PacketDriverTask implements TimerTask {
-
- // Filler echo request
- ICMP icmp;
- Ethernet eth;
-
- public PacketDriverTask() {
- icmp = new ICMP();
- icmp.setIcmpType((byte) 8).setIcmpCode((byte) 0).setChecksum((short) 0);
- eth = new Ethernet();
- eth.setEtherType(Ethernet.TYPE_IPV4);
- eth.setPayload(icmp);
- }
-
- @Override
- public void run(Timeout to) {
- if (!devices.isEmpty() && !to.isCancelled()) {
- sendEvent(devices.get(Math.min(currentDevice, devices.size() - 1)));
- currentDevice = (currentDevice + 1) % devices.size();
- timeout = timer.newTimeout(to.getTask(), delay, TimeUnit.MILLISECONDS);
- }
- }
-
- private void sendEvent(Device device) {
- // Make it look like things came from ports attached to hosts
- eth.setSourceMACAddress("00:00:10:00:00:0" + SRC_HOST)
- .setDestinationMACAddress("00:00:10:00:00:0" + DST_HOST);
- InboundPacket inPkt = new DefaultInboundPacket(
- new ConnectPoint(device.id(), PortNumber.portNumber(SRC_HOST)),
- eth, ByteBuffer.wrap(eth.serialize()));
- providerService.processPacket(new NullPacketContext(inPkt, null));
- }
- }
-
- // Minimal PacketContext to make core and applications happy.
- private final class NullPacketContext extends DefaultPacketContext {
- private NullPacketContext(InboundPacket inPkt, OutboundPacket outPkt) {
- super(System.currentTimeMillis(), inPkt, outPkt, false);
- }
-
- @Override
- public void send() {
- // We don't send anything out.
- }
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
deleted file mode 100644
index 68c536b9..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * 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.nil;
-
-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.Modified;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.osgi.DefaultServiceDirectory;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.mastership.MastershipAdminService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.device.DeviceAdminService;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.flow.FlowRuleProviderRegistry;
-import org.onosproject.net.flow.FlowRuleProviderService;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.link.LinkProvider;
-import org.onosproject.net.link.LinkProviderRegistry;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.packet.PacketProviderRegistry;
-import org.onosproject.net.packet.PacketProviderService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.osgi.service.component.ComponentContext;
-import org.slf4j.Logger;
-
-import java.util.Dictionary;
-import java.util.Properties;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onlab.util.Tools.delay;
-import static org.onlab.util.Tools.get;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.MastershipRole.MASTER;
-import static org.onosproject.net.MastershipRole.NONE;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider of a fake network environment, i.e. devices, links, hosts, etc.
- * To be used for benchmarking only.
- */
-@Component(immediate = true)
-@Service(value = NullProviders.class)
-public class NullProviders {
-
- private static final Logger log = getLogger(NullProviders.class);
-
- static final String SCHEME = "null";
- static final String PROVIDER_ID = "org.onosproject.provider.nil";
-
- private static final String FORMAT =
- "Settings: enabled={}, topoShape={}, deviceCount={}, " +
- "hostCount={}, packetRate={}, mutationRate={}";
-
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ClusterService clusterService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected MastershipAdminService mastershipService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ComponentConfigService cfgService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceAdminService deviceService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostService hostService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LinkService linkService;
-
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceProviderRegistry deviceProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostProviderRegistry hostProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LinkProviderRegistry linkProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected FlowRuleProviderRegistry flowRuleProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PacketProviderRegistry packetProviderRegistry;
-
-
- private final NullDeviceProvider deviceProvider = new NullDeviceProvider();
- private final NullLinkProvider linkProvider = new NullLinkProvider();
- private final NullHostProvider hostProvider = new NullHostProvider();
- private final NullFlowRuleProvider flowRuleProvider = new NullFlowRuleProvider();
- private final NullPacketProvider packetProvider = new NullPacketProvider();
- private final TopologyMutationDriver topologyMutationDriver = new TopologyMutationDriver();
-
- private DeviceProviderService deviceProviderService;
- private HostProviderService hostProviderService;
- private LinkProviderService linkProviderService;
- private FlowRuleProviderService flowRuleProviderService;
- private PacketProviderService packetProviderService;
-
- private TopologySimulator simulator;
-
- @Property(name = "enabled", boolValue = false,
- label = "Enables or disables the provider")
- private boolean enabled = false;
-
- private static final String DEFAULT_TOPO_SHAPE = "configured";
- @Property(name = "topoShape", value = DEFAULT_TOPO_SHAPE,
- label = "Topology shape: configured, linear, reroute, tree, spineleaf, mesh")
- private String topoShape = DEFAULT_TOPO_SHAPE;
-
- private static final int DEFAULT_DEVICE_COUNT = 10;
- @Property(name = "deviceCount", intValue = DEFAULT_DEVICE_COUNT,
- label = "Number of devices to generate")
- private int deviceCount = DEFAULT_DEVICE_COUNT;
-
- private static final int DEFAULT_HOST_COUNT = 5;
- @Property(name = "hostCount", intValue = DEFAULT_HOST_COUNT,
- label = "Number of host to generate per device")
- private int hostCount = DEFAULT_HOST_COUNT;
-
- private static final int DEFAULT_PACKET_RATE = 5;
- @Property(name = "packetRate", intValue = DEFAULT_PACKET_RATE,
- label = "Packet-in/s rate; 0 for no packets")
- private int packetRate = DEFAULT_PACKET_RATE;
-
- private static final double DEFAULT_MUTATION_RATE = 0;
- @Property(name = "mutationRate", doubleValue = DEFAULT_MUTATION_RATE,
- label = "Link event/s topology mutation rate; 0 for no mutations")
- private double mutationRate = DEFAULT_MUTATION_RATE;
-
- private static final String DEFAULT_MASTERSHIP = "random";
- @Property(name = "mastership", value = DEFAULT_MASTERSHIP,
- label = "Mastership given as 'random' or 'node1=dpid,dpid/node2=dpid,...'")
- private String mastership = DEFAULT_MASTERSHIP;
-
-
- @Activate
- public void activate() {
- cfgService.registerProperties(getClass());
-
- deviceProviderService = deviceProviderRegistry.register(deviceProvider);
- hostProviderService = hostProviderRegistry.register(hostProvider);
- linkProviderService = linkProviderRegistry.register(linkProvider);
- flowRuleProviderService = flowRuleProviderRegistry.register(flowRuleProvider);
- packetProviderService = packetProviderRegistry.register(packetProvider);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- cfgService.unregisterProperties(getClass(), false);
- tearDown();
-
- deviceProviderRegistry.unregister(deviceProvider);
- hostProviderRegistry.unregister(hostProvider);
- linkProviderRegistry.unregister(linkProvider);
- flowRuleProviderRegistry.unregister(flowRuleProvider);
- packetProviderRegistry.unregister(packetProvider);
-
- deviceProviderService = null;
- hostProviderService = null;
- linkProviderService = null;
- flowRuleProviderService = null;
- packetProviderService = null;
-
- log.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
-
- boolean newEnabled;
- int newDeviceCount, newHostCount, newPacketRate;
- double newMutationRate;
- String newTopoShape, newMastership;
- try {
- String s = get(properties, "enabled");
- newEnabled = isNullOrEmpty(s) ? enabled : Boolean.parseBoolean(s.trim());
-
- newTopoShape = get(properties, "topoShape");
- newMastership = get(properties, "mastership");
-
- s = get(properties, "deviceCount");
- newDeviceCount = isNullOrEmpty(s) ? deviceCount : Integer.parseInt(s.trim());
-
- s = get(properties, "hostCount");
- newHostCount = isNullOrEmpty(s) ? hostCount : Integer.parseInt(s.trim());
-
- s = get(properties, "packetRate");
- newPacketRate = isNullOrEmpty(s) ? packetRate : Integer.parseInt(s.trim());
-
- s = get(properties, "mutationRate");
- newMutationRate = isNullOrEmpty(s) ? mutationRate : Double.parseDouble(s.trim());
-
- } catch (NumberFormatException e) {
- log.warn(e.getMessage());
- newEnabled = enabled;
- newTopoShape = topoShape;
- newDeviceCount = deviceCount;
- newHostCount = hostCount;
- newPacketRate = packetRate;
- newMutationRate = mutationRate;
- newMastership = mastership;
- }
-
- // Any change in the following parameters implies hard restart
- if (newEnabled != enabled || !newTopoShape.equals(topoShape) ||
- newDeviceCount != deviceCount || newHostCount != hostCount) {
- enabled = newEnabled;
- topoShape = newTopoShape;
- deviceCount = newDeviceCount;
- hostCount = newHostCount;
- packetRate = newPacketRate;
- mutationRate = newMutationRate;
- restartSimulation();
- }
-
- // Any change in the following parameters implies just a rate change
- if (newPacketRate != packetRate || newMutationRate != mutationRate) {
- packetRate = newPacketRate;
- mutationRate = newMutationRate;
- adjustRates();
- }
-
- // Any change in mastership implies just reassignments.
- if (!newMastership.equals(mastership)) {
- mastership = newMastership;
- reassignMastership();
- }
-
- log.info(FORMAT, enabled, topoShape, deviceCount, hostCount,
- packetRate, mutationRate);
- }
-
- /**
- * Severs the link between the specified end-points in both directions.
- *
- * @param one link endpoint
- * @param two link endpoint
- */
- public void severLink(ConnectPoint one, ConnectPoint two) {
- if (enabled) {
- topologyMutationDriver.severLink(one, two);
- }
- }
-
- /**
- * Severs the link between the specified end-points in both directions.
- *
- * @param one link endpoint
- * @param two link endpoint
- */
- public void repairLink(ConnectPoint one, ConnectPoint two) {
- if (enabled) {
- topologyMutationDriver.repairLink(one, two);
- }
- }
-
- // Resets simulation based on the current configuration parameters.
- private void restartSimulation() {
- tearDown();
- if (enabled) {
- setUp();
- }
- }
-
- // Sets up the topology simulation and all providers.
- private void setUp() {
- simulator = selectSimulator(topoShape);
- simulator.init(topoShape, deviceCount, hostCount,
- new DefaultServiceDirectory(),
- deviceProviderService, hostProviderService,
- linkProviderService);
- simulator.setUpTopology();
- flowRuleProvider.start(flowRuleProviderService);
- packetProvider.start(packetRate, hostService, deviceService,
- packetProviderService);
- topologyMutationDriver.start(mutationRate, linkService, deviceService,
- linkProviderService);
- }
-
- // Selects the simulator based on the specified name.
- private TopologySimulator selectSimulator(String topoShape) {
- if (topoShape.matches("linear([,].*|$)")) {
- return new LinearTopologySimulator();
- } else if (topoShape.matches("centipede([,].*|$)")) {
- return new CentipedeTopologySimulator();
- } else if (topoShape.matches("reroute([,].*|$)")) {
- return new RerouteTopologySimulator();
- } else if (topoShape.matches("tree([,].*|$)")) {
- return new TreeTopologySimulator();
- } else if (topoShape.matches("agglink([,].*|$)")) {
- return new AggLinkTopologySimulator();
- } else if (topoShape.matches("spineleaf([,].*|$)")) {
- return new SpineLeafTopologySimulator();
- } else if (topoShape.matches("mesh([,].*|$)")) {
- return new MeshTopologySimulator();
- } else {
- return new ConfiguredTopologySimulator();
- }
- }
-
- // Shuts down the topology simulator and all providers.
- private void tearDown() {
- if (simulator != null) {
- topologyMutationDriver.stop();
- packetProvider.stop();
- flowRuleProvider.stop();
- delay(500);
- simulator.tearDownTopology();
- simulator = null;
- }
- }
-
- // Changes packet and mutation rates.
- private void adjustRates() {
- packetProvider.adjustRate(packetRate);
- topologyMutationDriver.adjustRate(mutationRate);
- }
-
- // Re-assigns mastership roles.
- private void reassignMastership() {
- if (mastership.equals(DEFAULT_MASTERSHIP)) {
- mastershipService.balanceRoles();
- } else {
- NodeId localNode = clusterService.getLocalNode().id();
- rejectMastership();
- String[] nodeSpecs = mastership.split("/");
- for (int i = 0; i < nodeSpecs.length; i++) {
- String[] specs = nodeSpecs[i].split("=");
- if (specs[0].equals(localNode.toString())) {
- String[] ids = specs[1].split(",");
- for (String id : ids) {
- mastershipService.setRole(localNode, deviceId(id), MASTER);
- }
- break;
- }
- }
- }
- }
-
- // Rejects mastership of all devices.
- private void rejectMastership() {
- NodeId localNode = clusterService.getLocalNode().id();
- deviceService.getDevices()
- .forEach(device -> mastershipService.setRole(localNode, device.id(),
- NONE));
- }
-
- // Null provider base class.
- abstract static class AbstractNullProvider extends AbstractProvider {
- protected AbstractNullProvider() {
- super(new ProviderId(SCHEME, PROVIDER_ID));
- }
- }
-
- // Device provider facade.
- private class NullDeviceProvider extends AbstractNullProvider implements DeviceProvider {
- @Override
- public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
- deviceProviderService.receivedRoleReply(deviceId, newRole, newRole);
- }
-
- @Override
- public boolean isReachable(DeviceId deviceId) {
- return topoShape.equals("configured") ||
- (simulator != null && simulator.contains(deviceId));
- }
-
- @Override
- public void triggerProbe(DeviceId deviceId) {
- }
- }
-
- // Host provider facade.
- private class NullHostProvider extends AbstractNullProvider implements HostProvider {
- @Override
- public void triggerProbe(Host host) {
- }
- }
-
- // Host provider facade.
- private class NullLinkProvider extends AbstractNullProvider implements LinkProvider {
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java
deleted file mode 100644
index d17466b9..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.nil;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Re-routable linear topology simulator with an alternate path in the middle.
- */
-public class RerouteTopologySimulator extends LinearTopologySimulator {
-
- @Override
- protected void processTopoShape(String shape) {
- super.processTopoShape(shape);
- infrastructurePorts = 5;
- deviceCount = (topoShape.length == 1) ? deviceCount : Integer.parseInt(topoShape[1]);
- }
-
- @Override
- public void setUpTopology() {
- checkArgument(deviceCount > 2, "There must be at least 3 devices");
- super.setUpTopology();
- }
-
- @Override
- protected void createLinks() {
- int portOffset = 1;
- for (int i = 0, n = deviceCount - 2; i < n; i++) {
- createLink(i, i + 1, portOffset, 1);
- portOffset = 2;
- }
- int middle = (deviceCount - 1) / 2;
- int alternate = deviceCount - 1;
- createLink(middle - 1, alternate, 3, 1);
- createLink(middle, alternate, 3, 2);
- }
-
- @Override
- protected void createHosts() {
- createHosts(deviceIds.get(0), infrastructurePorts);
- createHosts(deviceIds.get(deviceCount - 2), infrastructurePorts);
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/SpineLeafTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/SpineLeafTopologySimulator.java
deleted file mode 100644
index 876fc5dc..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/SpineLeafTopologySimulator.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.nil;
-
-/**
- * Spine-leaf topology with hosts at the leaf devices.
- */
-public class SpineLeafTopologySimulator extends TopologySimulator {
-
- @Override
- protected void processTopoShape(String shape) {
- super.processTopoShape(shape);
- // FIXME: implement this
- }
-
- @Override
- public void setUpTopology() {
- // checkArgument(FIXME, "There must be at least one spine tier");
- super.setUpTopology();
- }
-
- @Override
- protected void createLinks() {
- }
-
- @Override
- protected void createHosts() {
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologyMutationDriver.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologyMutationDriver.java
deleted file mode 100644
index ccf7e08a..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologyMutationDriver.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * 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.nil;
-
-import com.google.common.collect.Lists;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.link.DefaultLinkDescription;
-import org.onosproject.net.link.LinkDescription;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.link.LinkService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.ExecutorService;
-import java.util.stream.Collectors;
-
-import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
-import static org.onlab.util.Tools.delay;
-import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.net.Link.Type.DIRECT;
-import static org.onosproject.net.MastershipRole.MASTER;
-import static org.onosproject.provider.nil.TopologySimulator.description;
-
-/**
- * Drives topology mutations at a specified rate of events per second.
- */
-class TopologyMutationDriver implements Runnable {
-
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- private static final int WAIT_DELAY = 2_000;
- private static final int MAX_DOWN_LINKS = 5;
-
- private final Random random = new Random();
-
- private volatile boolean stopped = true;
-
- private double mutationRate;
- private int millis, nanos;
-
- private LinkService linkService;
- private DeviceService deviceService;
- private LinkProviderService linkProviderService;
-
- private List<LinkDescription> activeLinks;
- private List<LinkDescription> inactiveLinks;
-
- private final ExecutorService executor =
- newSingleThreadScheduledExecutor(groupedThreads("onos/null", "topo-mutator"));
-
- /**
- * Starts the mutation process.
- *
- * @param mutationRate link events per second
- * @param linkService link service
- * @param deviceService device service
- * @param linkProviderService link provider service
- */
- void start(double mutationRate,
- LinkService linkService, DeviceService deviceService,
- LinkProviderService linkProviderService) {
- stopped = false;
- this.linkService = linkService;
- this.deviceService = deviceService;
- this.linkProviderService = linkProviderService;
- activeLinks = reduceLinks();
- inactiveLinks = Lists.newArrayList();
- adjustRate(mutationRate);
- executor.submit(this);
- }
-
- /**
- * Adjusts the topology mutation rate.
- *
- * @param mutationRate new topology mutation rate
- */
- void adjustRate(double mutationRate) {
- this.mutationRate = mutationRate;
- if (mutationRate > 0) {
- this.millis = (int) (1_000 / mutationRate / 2);
- this.nanos = (int) (1_000_000 / mutationRate / 2) % 1_000_000;
- } else {
- this.millis = 0;
- this.nanos = 0;
- }
- log.info("Settings: millis={}, nanos={}", millis, nanos);
- }
-
- /**
- * Stops the mutation process.
- */
- void stop() {
- stopped = true;
- }
-
- /**
- * Severs the link between the specified end-points in both directions.
- *
- * @param one link endpoint
- * @param two link endpoint
- */
- void severLink(ConnectPoint one, ConnectPoint two) {
- LinkDescription link = new DefaultLinkDescription(one, two, DIRECT);
- linkProviderService.linkVanished(link);
- linkProviderService.linkVanished(reverse(link));
-
- }
-
- /**
- * Repairs the link between the specified end-points in both directions.
- *
- * @param one link endpoint
- * @param two link endpoint
- */
- void repairLink(ConnectPoint one, ConnectPoint two) {
- LinkDescription link = new DefaultLinkDescription(one, two, DIRECT);
- linkProviderService.linkDetected(link);
- linkProviderService.linkDetected(reverse(link));
- }
-
- @Override
- public void run() {
- delay(WAIT_DELAY);
-
- while (!stopped) {
- if (mutationRate > 0 && inactiveLinks.isEmpty()) {
- primeInactiveLinks();
- } else if (mutationRate <= 0 && !inactiveLinks.isEmpty()) {
- repairInactiveLinks();
- } else if (inactiveLinks.isEmpty()) {
- delay(WAIT_DELAY);
-
- } else {
- activeLinks.add(repairLink());
- pause();
- inactiveLinks.add(severLink());
- pause();
- }
- }
- }
-
- // Primes the inactive links with a few random links.
- private void primeInactiveLinks() {
- for (int i = 0, n = Math.min(MAX_DOWN_LINKS, activeLinks.size()); i < n; i++) {
- inactiveLinks.add(severLink());
- }
- }
-
- // Repairs all inactive links.
- private void repairInactiveLinks() {
- while (!inactiveLinks.isEmpty()) {
- repairLink();
- }
- }
-
- // Picks a random active link and severs it.
- private LinkDescription severLink() {
- LinkDescription link = getRandomLink(activeLinks);
- linkProviderService.linkVanished(link);
- linkProviderService.linkVanished(reverse(link));
- return link;
- }
-
- // Picks a random inactive link and repairs it.
- private LinkDescription repairLink() {
- LinkDescription link = getRandomLink(inactiveLinks);
- linkProviderService.linkDetected(link);
- linkProviderService.linkDetected(reverse(link));
- return link;
- }
-
- // Produces a reverse of the specified link.
- private LinkDescription reverse(LinkDescription link) {
- return new DefaultLinkDescription(link.dst(), link.src(), link.type());
- }
-
- // Returns a random link from the specified list of links.
- private LinkDescription getRandomLink(List<LinkDescription> links) {
- return links.remove(random.nextInt(links.size()));
- }
-
- // Reduces the given list of links to just a single link in each original pair.
- private List<LinkDescription> reduceLinks() {
- List<LinkDescription> links = Lists.newArrayList();
- linkService.getLinks().forEach(link -> links.add(description(link)));
- return links.stream()
- .filter(this::isOurLink)
- .filter(this::isRightDirection)
- .collect(Collectors.toList());
- }
-
- // Returns true if the specified link is ours.
- private boolean isOurLink(LinkDescription linkDescription) {
- return deviceService.getRole(linkDescription.src().deviceId()) == MASTER;
- }
-
- // Returns true if the link source is greater than the link destination.
- private boolean isRightDirection(LinkDescription link) {
- return link.src().deviceId().toString().compareTo(link.dst().deviceId().toString()) > 0;
- }
-
- // Pauses the current thread for the pre-computed time of millis & nanos.
- private void pause() {
- delay(millis, nanos);
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
deleted file mode 100644
index 9f2320ed..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * 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.nil;
-
-import com.google.common.collect.Lists;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DefaultPortDescription;
-import org.onosproject.net.device.DeviceAdminService;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.link.DefaultLinkDescription;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.link.LinkService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import static org.onlab.util.Tools.toHex;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.Link.Type.DIRECT;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.device.DeviceEvent.Type.*;
-import static org.onosproject.provider.nil.NullProviders.SCHEME;
-
-/**
- * Abstraction of a provider capable to simulate some network topology.
- */
-public abstract class TopologySimulator {
-
- protected final Logger log = LoggerFactory.getLogger(getClass());
-
- protected String[] topoShape;
- protected int deviceCount;
- protected int hostCount;
-
- protected ServiceDirectory directory;
- protected NodeId localNode;
-
- protected ClusterService clusterService;
- protected MastershipService mastershipService;
-
- protected DeviceAdminService deviceService;
- protected HostService hostService;
- protected LinkService linkService;
-
- protected DeviceProviderService deviceProviderService;
- protected HostProviderService hostProviderService;
- protected LinkProviderService linkProviderService;
-
- protected int maxWaitSeconds = 1;
- protected int infrastructurePorts = 2;
- protected CountDownLatch deviceLatch;
-
- protected final List<DeviceId> deviceIds = Lists.newArrayList();
-
- private DeviceListener deviceEventCounter = new DeviceEventCounter();
-
- /**
- * Initializes a new topology simulator with access to the specified service
- * directory and various provider services.
- *
- * @param topoShape topology shape specifier
- * @param deviceCount number of devices in the topology
- * @param hostCount number of hosts per device
- * @param directory service directory
- * @param deviceProviderService device provider service
- * @param hostProviderService host provider service
- * @param linkProviderService link provider service
- */
- protected void init(String topoShape, int deviceCount, int hostCount,
- ServiceDirectory directory,
- DeviceProviderService deviceProviderService,
- HostProviderService hostProviderService,
- LinkProviderService linkProviderService) {
- this.deviceCount = deviceCount;
- this.hostCount = hostCount;
- this.directory = directory;
-
- this.clusterService = directory.get(ClusterService.class);
- this.mastershipService = directory.get(MastershipService.class);
-
- this.deviceService = directory.get(DeviceAdminService.class);
- this.hostService = directory.get(HostService.class);
- this.linkService = directory.get(LinkService.class);
- this.deviceProviderService = deviceProviderService;
- this.hostProviderService = hostProviderService;
- this.linkProviderService = linkProviderService;
-
- localNode = clusterService.getLocalNode().id();
-
- processTopoShape(topoShape);
- }
-
- /**
- * Processes the topology shape specifier.
- *
- * @param shape topology shape specifier
- */
- protected void processTopoShape(String shape) {
- this.topoShape = shape.split(",");
- }
-
- /**
- * Sets up network topology simulation.
- */
- public void setUpTopology() {
- prepareForDeviceEvents(deviceCount);
- createDevices();
- waitForDeviceEvents();
-
- createLinks();
- createHosts();
- }
-
- /**
- * Creates simulated devices.
- */
- protected void createDevices() {
- for (int i = 0; i < deviceCount; i++) {
- createDevice(i + 1);
- }
- }
-
- /**
- * Creates simulated links.
- */
- protected abstract void createLinks();
-
- /**
- * Creates simulated hosts.
- */
- protected abstract void createHosts();
-
- /**
- * Creates simulated device.
- *
- * @param i index of the device id in the list.
- */
- protected void createDevice(int i) {
- DeviceId id = DeviceId.deviceId(SCHEME + ":" + toHex(i));
- DeviceDescription desc =
- new DefaultDeviceDescription(id.uri(), Device.Type.SWITCH,
- "ON.Lab", "0.1", "0.1", "1234",
- new ChassisId(i));
- deviceIds.add(id);
- deviceProviderService.deviceConnected(id, desc);
- deviceProviderService.updatePorts(id, buildPorts(hostCount + infrastructurePorts));
- }
-
-// /**
-// * Creates simulated link between two devices on port 1 and port 2.
-// *
-// * @param i index of one simulated device
-// * @param j index of another simulated device
-// */
-// protected void createLink(int i, int j) {
-// createLink(i, j, 1, 2);
-// }
-
- /**
- * Creates simulated link between two devices.
- *
- * @param i index of one simulated device
- * @param j index of another simulated device
- * @param pi port number of i-th device
- * @param pj port number of j-th device
- */
- protected void createLink(int i, int j, int pi, int pj) {
- ConnectPoint one = new ConnectPoint(deviceIds.get(i), PortNumber.portNumber(pi));
- ConnectPoint two = new ConnectPoint(deviceIds.get(j), PortNumber.portNumber(pj));
- linkProviderService.linkDetected(new DefaultLinkDescription(one, two, DIRECT));
- linkProviderService.linkDetected(new DefaultLinkDescription(two, one, DIRECT));
- }
-
- /**
- * Creates simularted hosts for the specified device.
- *
- * @param deviceId device identifier
- * @param portOffset port offset where to start attaching hosts
- */
- protected void createHosts(DeviceId deviceId, int portOffset) {
- String s = deviceId.toString();
- byte dByte = Byte.parseByte(s.substring(s.length() - 1), 16);
- // TODO: this limits the simulation to 256 devices & 256 hosts/device.
- byte[] macBytes = new byte[]{0, 0, 0, 0, dByte, 0};
- byte[] ipBytes = new byte[]{(byte) 192, (byte) 168, dByte, 0};
-
- for (int i = 0; i < hostCount; i++) {
- int port = portOffset + i + 1;
- macBytes[5] = (byte) (i + 1);
- ipBytes[3] = (byte) (i + 1);
- HostId id = hostId(MacAddress.valueOf(macBytes), VlanId.NONE);
- IpAddress ip = IpAddress.valueOf(IpAddress.Version.INET, ipBytes);
- hostProviderService.hostDetected(id, description(id, ip, deviceId, port));
- }
- }
-
- /**
- * Prepares to count device added/available/removed events.
- *
- * @param count number of events to count
- */
- protected void prepareForDeviceEvents(int count) {
- deviceLatch = new CountDownLatch(count);
- deviceService.addListener(deviceEventCounter);
- }
-
- /**
- * Waits for all expected device added/available/removed events.
- */
- protected void waitForDeviceEvents() {
- try {
- deviceLatch.await(maxWaitSeconds, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- log.warn("Device events did not arrive in time");
- }
- deviceService.removeListener(deviceEventCounter);
- }
-
-
- /**
- * Tears down network topology simulation.
- */
- public void tearDownTopology() {
- removeHosts();
- removeLinks();
- removeDevices();
- }
-
- /**
- * Removes any hosts previously advertised by this provider.
- */
- protected void removeHosts() {
- hostService.getHosts()
- .forEach(host -> hostProviderService.hostVanished(host.id()));
- }
-
- /**
- * Removes any links previously advertised by this provider.
- */
- protected void removeLinks() {
- linkService.getLinks()
- .forEach(link -> linkProviderService.linkVanished(description(link)));
- }
-
- /**
- * Removes any devices previously advertised by this provider.
- */
- protected void removeDevices() {
- prepareForDeviceEvents(deviceIds.size());
- deviceIds.forEach(deviceProviderService::deviceDisconnected);
- waitForDeviceEvents();
- deviceIds.clear();
- }
-
-
- /**
- * Produces a device description from the given device.
- *
- * @param device device to copy
- * @return device description
- */
- static DeviceDescription description(Device device) {
- return new DefaultDeviceDescription(device.id().uri(), device.type(),
- device.manufacturer(),
- device.hwVersion(), device.swVersion(),
- device.serialNumber(), device.chassisId());
- }
-
- /**
- * Produces a link description from the given link.
- *
- * @param link link to copy
- * @return link description
- */
- static DefaultLinkDescription description(Link link) {
- return new DefaultLinkDescription(link.src(), link.dst(), link.type());
- }
-
- /**
- * Produces a host description from the given host.
- *
- * @param host host to copy
- * @return host description
- */
- static DefaultHostDescription description(Host host) {
- return new DefaultHostDescription(host.mac(), host.vlan(), host.location(),
- host.ipAddresses());
- }
-
- /**
- * Generates a host description from the given id and location information.
- *
- * @param hostId host identifier
- * @param ip host IP
- * @param deviceId edge device
- * @param port edge port
- * @return host description
- */
- static HostDescription description(HostId hostId, IpAddress ip,
- DeviceId deviceId, int port) {
- HostLocation location = new HostLocation(deviceId, portNumber(port), 0L);
- return new DefaultHostDescription(hostId.mac(), hostId.vlanId(), location, ip);
- }
-
- /**
- * Generates a list of a configured number of ports.
- *
- * @param portCount number of ports
- * @return list of ports
- */
- protected List<PortDescription> buildPorts(int portCount) {
- List<PortDescription> ports = Lists.newArrayList();
- for (int i = 0; i < portCount; i++) {
- ports.add(new DefaultPortDescription(PortNumber.portNumber(i), true,
- Port.Type.COPPER, 0));
- }
- return ports;
- }
-
- /**
- * Indicates whether or not the simulation knows of this device.
- *
- * @param deviceId device identifier
- * @return true if device is known
- */
- public boolean contains(DeviceId deviceId) {
- return deviceIds.contains(deviceId);
- }
-
- // Counts down number of device added/available/removed events.
- private class DeviceEventCounter implements DeviceListener {
- @Override
- public void event(DeviceEvent event) {
- DeviceEvent.Type type = event.type();
- if (type == DEVICE_ADDED || type == DEVICE_REMOVED ||
- type == DEVICE_AVAILABILITY_CHANGED) {
- deviceLatch.countDown();
- }
- }
- }
-} \ No newline at end of file
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java
deleted file mode 100644
index 2c049333..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.nil;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Tree topology with hosts at the leaf devices.
- */
-public class TreeTopologySimulator extends TopologySimulator {
-
- private int[] tierMultiplier;
- private int[] tierDeviceCount;
- private int[] tierOffset;
-
- @Override
- protected void processTopoShape(String shape) {
- super.processTopoShape(shape);
- tierOffset = new int[topoShape.length];
- tierMultiplier = new int[topoShape.length];
- tierDeviceCount = new int[topoShape.length];
-
- deviceCount = 1;
-
- tierOffset[0] = 0;
- tierMultiplier[0] = 1;
- tierDeviceCount[0] = deviceCount;
-
- for (int i = 1; i < topoShape.length; i++) {
- tierOffset[i] = deviceCount;
- tierMultiplier[i] = Integer.parseInt(topoShape[i]);
- tierDeviceCount[i] = tierDeviceCount[i - 1] * tierMultiplier[i];
- deviceCount = deviceCount + tierDeviceCount[i];
- }
- }
-
- @Override
- public void setUpTopology() {
- checkArgument(tierDeviceCount.length > 0, "There must be at least one tree tier");
- super.setUpTopology();
- }
-
- @Override
- protected void createLinks() {
- int portOffset = 1;
- for (int t = 1; t < tierOffset.length; t++) {
- int child = tierOffset[t];
- for (int parent = tierOffset[t - 1]; parent < tierOffset[t]; parent++) {
- for (int i = 0; i < tierMultiplier[t]; i++) {
- createLink(parent, child, i + portOffset, 1);
- child++;
- }
- }
- portOffset = 2; // beyond first tier, allow for up-links
- }
- }
-
- @Override
- protected void createHosts() {
- for (int i = tierOffset[tierOffset.length - 1]; i < deviceCount; i++) {
- createHosts(deviceIds.get(i), hostCount);
- }
- }
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java
deleted file mode 100644
index 261f46de..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.nil.cli;
-
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.provider.nil.NullProviders;
-
-import static org.onosproject.cli.StartStopCompleter.START;
-
-/**
- * Starts or stops topology simulation.
- */
-@Command(scope = "onos", name = "null-simulation",
- description = "Starts or stops topology simulation")
-public class NullControlCommand extends AbstractShellCommand {
-
- @Argument(index = 0, name = "cmd", description = "Control command: start/stop",
- required = true, multiValued = false)
- String cmd = null;
-
- @Argument(index = 1, name = "topoShape",
- description = "Topology shape: e.g. configured, linear, reroute, centipede, tree, spineleaf, mesh",
- required = false, multiValued = false)
- String topoShape = null;
-
- @Override
- protected void execute() {
- ComponentConfigService service = get(ComponentConfigService.class);
- if (topoShape != null) {
- service.setProperty(NullProviders.class.getName(), "topoShape", topoShape);
- }
- service.setProperty(NullProviders.class.getName(), "enabled",
- cmd.equals(START) ? "true" : "false");
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullLinkCommand.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullLinkCommand.java
deleted file mode 100644
index a76da3b8..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullLinkCommand.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.nil.cli;
-
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.provider.nil.NullProviders;
-
-import static org.onosproject.cli.UpDownCompleter.DOWN;
-import static org.onosproject.cli.UpDownCompleter.UP;
-
-/**
- * Servers or repairs a simulated link.
- */
-@Command(scope = "onos", name = "null-link",
- description = "Severs or repairs a simulated link")
-public class NullLinkCommand extends AbstractShellCommand {
-
- @Argument(index = 0, name = "one", description = "One link end-point as device/port",
- required = true, multiValued = false)
- String one = null;
-
- @Argument(index = 1, name = "two", description = "Another link end-point as device/port",
- required = true, multiValued = false)
- String two = null;
-
- @Argument(index = 2, name = "cmd", description = "up/down",
- required = true, multiValued = false)
- String cmd = null;
-
-
- @Override
- protected void execute() {
- NullProviders service = get(NullProviders.class);
-
- try {
- ConnectPoint onePoint = ConnectPoint.deviceConnectPoint(one);
-
- ConnectPoint twoPoint = ConnectPoint.deviceConnectPoint(two);
-
- if (cmd.equals(UP)) {
- service.repairLink(onePoint, twoPoint);
- } else if (cmd.equals(DOWN)) {
- service.severLink(onePoint, twoPoint);
- } else {
- error("Illegal command %s; must be up or down", cmd);
- }
- } catch (NumberFormatException e) {
- error("Invalid port number specified", e);
- }
- }
-
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/TopologyShapeCompleter.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/TopologyShapeCompleter.java
deleted file mode 100644
index fad29b6e..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/TopologyShapeCompleter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.nil.cli;
-
-import com.google.common.collect.ImmutableList;
-import org.onosproject.cli.AbstractChoicesCompleter;
-
-import java.util.List;
-
-/**
- * Topology shape completer.
- */
-public class TopologyShapeCompleter extends AbstractChoicesCompleter {
- @Override
- public List<String> choices() {
- return ImmutableList.of("configured", "linear", "reroute", "centipede",
- "tree", "spineleaf", "mesh");
- }
-}
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/package-info.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/package-info.java
deleted file mode 100644
index f876ced3..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/cli/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Null provider CLI commands and completers.
- */
-package org.onosproject.provider.nil.cli;
diff --git a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/package-info.java b/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/package-info.java
deleted file mode 100644
index e8d309f7..00000000
--- a/framework/src/onos/providers/null/src/main/java/org/onosproject/provider/nil/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Set of null south-bound providers which permit simulating a network
- * topology using fake devices, links, hosts, etc.
- */
-package org.onosproject.provider.nil;
diff --git a/framework/src/onos/providers/null/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/framework/src/onos/providers/null/src/main/resources/OSGI-INF/blueprint/shell-config.xml
deleted file mode 100644
index f96f10cc..00000000
--- a/framework/src/onos/providers/null/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<!--
- ~ 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.
- -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
- <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
- <command>
- <action class="org.onosproject.provider.nil.cli.NullControlCommand"/>
- <completers>
- <ref component-id="startStopCompleter"/>
- <ref component-id="topoShapeCompleter"/>
- <null/>
- </completers>
- </command>
- <command>
- <action class="org.onosproject.provider.nil.cli.NullLinkCommand"/>
- <completers>
- <ref component-id="linkSrcCompleter"/>
- <ref component-id="linkDstCompleter"/>
- <ref component-id="upDownCompleter"/>
- <null/>
- </completers>
- </command>
- </command-bundle>
-
- <bean id="startStopCompleter" class="org.onosproject.cli.StartStopCompleter"/>
- <bean id="upDownCompleter" class="org.onosproject.cli.UpDownCompleter"/>
- <bean id="topoShapeCompleter" class="org.onosproject.provider.nil.cli.TopologyShapeCompleter"/>
- <bean id="linkSrcCompleter" class="org.onosproject.cli.net.LinkSrcCompleter"/>
- <bean id="linkDstCompleter" class="org.onosproject.cli.net.LinkDstCompleter"/>
-
-</blueprint>
diff --git a/framework/src/onos/providers/openflow/app/pom.xml b/framework/src/onos/providers/openflow/app/pom.xml
deleted file mode 100644
index 37564272..00000000
--- a/framework/src/onos/providers/openflow/app/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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.
- -->
-<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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-openflow</artifactId>
- <packaging>bundle</packaging>
-
- <properties>
- <onos.app.name>org.onosproject.openflow</onos.app.name>
- <onos.app.requires>
- org.onosproject.openflow-base,
- org.onosproject.hostprovider,
- org.onosproject.lldpprovider
- </onos.app.requires>
- </properties>
-
- <description>OpenFlow southbound meta application</description>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-api</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/openflow/base/app.xml b/framework/src/onos/providers/openflow/base/app.xml
deleted file mode 100644
index 34e6b151..00000000
--- a/framework/src/onos/providers/openflow/base/app.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright 2014-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.
- -->
-<app name="org.onosproject.openflow-base" origin="ON.Lab" version="${project.version}"
- featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
- features="${project.artifactId}">
- <description>${project.description}</description>
-
- <artifact>mvn:${project.groupId}/onos-of-api/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-of-ctl/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-drivers/${project.version}</artifact>
-
- <artifact>mvn:${project.groupId}/onos-of-provider-device/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-of-provider-packet/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-of-provider-flow/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-of-provider-group/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-of-provider-meter/${project.version}</artifact>
-</app>
diff --git a/framework/src/onos/providers/openflow/base/features.xml b/framework/src/onos/providers/openflow/base/features.xml
deleted file mode 100644
index 54e9cacb..00000000
--- a/framework/src/onos/providers/openflow/base/features.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
- ~ Copyright 2014-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.
- -->
-<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:io.netty/netty/3.9.2.Final</bundle>
- <bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-of-ctl/${project.version}</bundle>
-
- <bundle>mvn:${project.groupId}/onos-of-provider-device/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-of-provider-packet/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-of-provider-flow/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-of-provider-group/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-of-provider-meter/${project.version}</bundle>
- </feature>
-</features>
diff --git a/framework/src/onos/providers/openflow/base/pom.xml b/framework/src/onos/providers/openflow/base/pom.xml
deleted file mode 100644
index 231a17a4..00000000
--- a/framework/src/onos/providers/openflow/base/pom.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright 2014-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.
- -->
-<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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-openflow-base</artifactId>
- <packaging>pom</packaging>
-
- <description>OpenFlow protocol southbound providers</description>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-ctl</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-drivers</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-provider-device</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-provider-packet</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-provider-flow</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-provider-group</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/openflow/device/pom.xml b/framework/src/onos/providers/openflow/device/pom.xml
deleted file mode 100644
index e1c42a5d..00000000
--- a/framework/src/onos/providers/openflow/device/pom.xml
+++ /dev/null
@@ -1,39 +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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-of-provider-device</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS OpenFlow protocol device provider</description>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
deleted file mode 100644
index 4ceb425c..00000000
--- a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * Copyright 2014-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.of.device.impl;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onlab.util.Tools.get;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.Port.Type.COPPER;
-import static org.onosproject.net.Port.Type.FIBER;
-import static org.onosproject.openflow.controller.Dpid.dpid;
-import static org.onosproject.openflow.controller.Dpid.uri;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-
-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.Modified;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onlab.packet.ChassisId;
-import org.onlab.util.Frequency;
-import org.onlab.util.Spectrum;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.ChannelSpacing;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.GridType;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.OchSignal;
-import org.onosproject.net.OduCltPort;
-import org.onosproject.net.OduSignalType;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DefaultPortDescription;
-import org.onosproject.net.device.DefaultPortStatistics;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.OchPortDescription;
-import org.onosproject.net.device.OduCltPortDescription;
-import org.onosproject.net.device.OmsPortDescription;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.device.PortStatistics;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowOpticalSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.PortDescPropertyType;
-import org.onosproject.openflow.controller.RoleState;
-import org.osgi.service.component.ComponentContext;
-import org.projectfloodlight.openflow.protocol.OFCalientPortDescStatsEntry;
-import org.projectfloodlight.openflow.protocol.OFExpPort;
-import org.projectfloodlight.openflow.protocol.OFExpPortDescPropOpticalTransport;
-import org.projectfloodlight.openflow.protocol.OFExpPortOpticalTransportLayerEntry;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFObject;
-import org.projectfloodlight.openflow.protocol.OFPortConfig;
-import org.projectfloodlight.openflow.protocol.OFPortDesc;
-import org.projectfloodlight.openflow.protocol.OFPortDescPropOpticalTransport;
-import org.projectfloodlight.openflow.protocol.OFPortFeatures;
-import org.projectfloodlight.openflow.protocol.OFPortOptical;
-import org.projectfloodlight.openflow.protocol.OFPortOpticalTransportLayerClass;
-import org.projectfloodlight.openflow.protocol.OFPortOpticalTransportSignalType;
-import org.projectfloodlight.openflow.protocol.OFPortReason;
-import org.projectfloodlight.openflow.protocol.OFPortState;
-import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
-import org.projectfloodlight.openflow.protocol.OFPortStatsReply;
-import org.projectfloodlight.openflow.protocol.OFPortStatus;
-import org.projectfloodlight.openflow.protocol.OFStatsReply;
-import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags;
-import org.projectfloodlight.openflow.protocol.OFStatsType;
-import org.projectfloodlight.openflow.protocol.OFVersion;
-import org.projectfloodlight.openflow.types.PortSpeed;
-import org.slf4j.Logger;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-/**
- * Provider which uses an OpenFlow controller to detect network
- * infrastructure devices.
- */
-@Component(immediate = true)
-public class OpenFlowDeviceProvider extends AbstractProvider implements DeviceProvider {
-
- private static final Logger LOG = getLogger(OpenFlowDeviceProvider.class);
-
- private static final long MBPS = 1_000 * 1_000;
- private static final Frequency FREQ100 = Frequency.ofGHz(100);
- private static final Frequency FREQ193_1 = Frequency.ofTHz(193.1);
- private static final Frequency FREQ4_4 = Frequency.ofTHz(4.4);
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OpenFlowController controller;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ComponentConfigService cfgService;
-
- private DeviceProviderService providerService;
-
- private final InternalDeviceProvider listener = new InternalDeviceProvider();
-
- // TODO: We need to make the poll interval configurable.
- static final int POLL_INTERVAL = 5;
- @Property(name = "PortStatsPollFrequency", intValue = POLL_INTERVAL,
- label = "Frequency (in seconds) for polling switch Port statistics")
- private int portStatsPollFrequency = POLL_INTERVAL;
-
- private HashMap<Dpid, PortStatsCollector> collectors = Maps.newHashMap();
-
- /**
- * Creates an OpenFlow device provider.
- */
- public OpenFlowDeviceProvider() {
- super(new ProviderId("of", "org.onosproject.provider.openflow"));
- }
-
- @Activate
- public void activate(ComponentContext context) {
- cfgService.registerProperties(getClass());
- providerService = providerRegistry.register(this);
- controller.addListener(listener);
- controller.addEventListener(listener);
- connectInitialDevices();
- LOG.info("Started");
- }
-
- @Deactivate
- public void deactivate(ComponentContext context) {
- cfgService.unregisterProperties(getClass(), false);
- controller.removeListener(listener);
- disconnectDevices();
- providerRegistry.unregister(this);
- collectors.values().forEach(PortStatsCollector::stop);
- providerService = null;
- LOG.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- Dictionary<?, ?> properties = context.getProperties();
- int newPortStatsPollFrequency;
- try {
- String s = get(properties, "PortStatsPollFrequency");
- newPortStatsPollFrequency = isNullOrEmpty(s) ? portStatsPollFrequency : Integer.parseInt(s.trim());
-
- } catch (NumberFormatException | ClassCastException e) {
- newPortStatsPollFrequency = portStatsPollFrequency;
- }
-
- if (newPortStatsPollFrequency != portStatsPollFrequency) {
- portStatsPollFrequency = newPortStatsPollFrequency;
- collectors.values().forEach(psc -> psc.adjustPollInterval(portStatsPollFrequency));
- }
-
- LOG.info("Settings: portStatsPollFrequency={}", portStatsPollFrequency);
- }
-
- private void connectInitialDevices() {
- for (OpenFlowSwitch sw : controller.getSwitches()) {
- try {
- listener.switchAdded(new Dpid(sw.getId()));
- } catch (Exception e) {
- LOG.warn("Failed initially adding {} : {}", sw.getStringId(), e.getMessage());
- LOG.debug("Error details:", e);
- // disconnect to trigger switch-add later
- sw.disconnectSwitch();
- }
- PortStatsCollector psc = new PortStatsCollector(sw, portStatsPollFrequency);
- psc.start();
- collectors.put(new Dpid(sw.getId()), psc);
- }
- }
-
- private void disconnectDevices() {
- // Only disconnect the devices for which we are currently master.
- controller.getMasterSwitches().forEach(sw -> listener.switchRemoved(new Dpid(sw.getId())));
- }
-
- @Override
- public boolean isReachable(DeviceId deviceId) {
- OpenFlowSwitch sw = controller.getSwitch(dpid(deviceId.uri()));
- return sw != null && sw.isConnected();
- }
-
- @Override
- public void triggerProbe(DeviceId deviceId) {
- LOG.debug("Triggering probe on device {}", deviceId);
-
- final Dpid dpid = dpid(deviceId.uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null || !sw.isConnected()) {
- LOG.error("Failed to probe device {} on sw={}", deviceId, sw);
- providerService.deviceDisconnected(deviceId);
- return;
- } else {
- LOG.trace("Confirmed device {} connection", deviceId);
- }
-
- // Prompt an update of port information. We can use any XID for this.
- OFFactory fact = sw.factory();
- switch (fact.getVersion()) {
- case OF_10:
- sw.sendMsg(fact.buildFeaturesRequest().setXid(0).build());
- break;
- case OF_13:
- sw.sendMsg(fact.buildPortDescStatsRequest().setXid(0).build());
- break;
- default:
- LOG.warn("Unhandled protocol version");
- }
- }
-
- @Override
- public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
- switch (newRole) {
- case MASTER:
- controller.setRole(dpid(deviceId.uri()), RoleState.MASTER);
- break;
- case STANDBY:
- controller.setRole(dpid(deviceId.uri()), RoleState.EQUAL);
- break;
- case NONE:
- controller.setRole(dpid(deviceId.uri()), RoleState.SLAVE);
- break;
- default:
- LOG.error("Unknown Mastership state : {}", newRole);
-
- }
- LOG.debug("Accepting mastership role change for device {}", deviceId);
- }
-
- private void pushPortMetrics(Dpid dpid, List<OFPortStatsEntry> portStatsEntries) {
- DeviceId deviceId = DeviceId.deviceId(dpid.uri(dpid));
- Collection<PortStatistics> stats = buildPortStatistics(deviceId, portStatsEntries);
- providerService.updatePortStatistics(deviceId, stats);
- }
-
- private Collection<PortStatistics> buildPortStatistics(DeviceId deviceId,
- List<OFPortStatsEntry> entries) {
- HashSet<PortStatistics> stats = Sets.newHashSet();
-
- for (OFPortStatsEntry entry : entries) {
- try {
- if (entry == null || entry.getPortNo() == null || entry.getPortNo().getPortNumber() < 0) {
- continue;
- }
- DefaultPortStatistics.Builder builder = DefaultPortStatistics.builder();
- DefaultPortStatistics stat = builder.setDeviceId(deviceId)
- .setPort(entry.getPortNo().getPortNumber())
- .setPacketsReceived(entry.getRxPackets().getValue())
- .setPacketsSent(entry.getTxPackets().getValue())
- .setBytesReceived(entry.getRxBytes().getValue())
- .setBytesSent(entry.getTxBytes().getValue())
- .setPacketsRxDropped(entry.getRxDropped().getValue())
- .setPacketsTxDropped(entry.getTxDropped().getValue())
- .setPacketsRxErrors(entry.getRxErrors().getValue())
- .setPacketsTxErrors(entry.getTxErrors().getValue())
- .setDurationSec(entry.getVersion() == OFVersion.OF_10 ? 0 : entry.getDurationSec())
- .setDurationNano(entry.getVersion() == OFVersion.OF_10 ? 0 : entry.getDurationNsec())
- .build();
-
- stats.add(stat);
- } catch (Exception e) {
- LOG.warn("Unable to process port stats", e);
- }
- }
-
- return Collections.unmodifiableSet(stats);
-
- }
-
- private class InternalDeviceProvider implements OpenFlowSwitchListener, OpenFlowEventListener {
-
- private HashMap<Dpid, List<OFPortStatsEntry>> portStatsReplies = new HashMap<>();
-
- @Override
- public void switchAdded(Dpid dpid) {
- if (providerService == null) {
- return;
- }
- DeviceId did = deviceId(uri(dpid));
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null) {
- return;
- }
-
- ChassisId cId = new ChassisId(dpid.value());
-
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set(AnnotationKeys.PROTOCOL, sw.factory().getVersion().toString())
- .set(AnnotationKeys.CHANNEL_ID, sw.channelId())
- .set(AnnotationKeys.MANAGEMENT_ADDRESS, sw.channelId().split(":")[0])
- .build();
-
- DeviceDescription description =
- new DefaultDeviceDescription(did.uri(), sw.deviceType(),
- sw.manufacturerDescription(),
- sw.hardwareDescription(),
- sw.softwareDescription(),
- sw.serialNumber(),
- cId, annotations);
- providerService.deviceConnected(did, description);
- providerService.updatePorts(did, buildPortDescriptions(sw));
-
- PortStatsCollector psc =
- new PortStatsCollector(sw, portStatsPollFrequency);
- psc.start();
- collectors.put(dpid, psc);
-
- //figure out race condition for collectors.remove() and collectors.put()
- if (controller.getSwitch(dpid) == null) {
- switchRemoved(dpid);
- }
- }
-
- @Override
- public void switchRemoved(Dpid dpid) {
- if (providerService == null) {
- return;
- }
- providerService.deviceDisconnected(deviceId(uri(dpid)));
-
- PortStatsCollector collector = collectors.remove(dpid);
- if (collector != null) {
- collector.stop();
- }
- }
-
- @Override
- public void switchChanged(Dpid dpid) {
- if (providerService == null) {
- return;
- }
- DeviceId did = deviceId(uri(dpid));
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null) {
- return;
- }
- providerService.updatePorts(did, buildPortDescriptions(sw));
- }
-
- @Override
- public void portChanged(Dpid dpid, OFPortStatus status) {
- PortDescription portDescription = buildPortDescription(status);
- providerService.portStatusChanged(deviceId(uri(dpid)), portDescription);
- }
-
- @Override
- public void receivedRoleReply(Dpid dpid, RoleState requested, RoleState response) {
- MastershipRole request = roleOf(requested);
- MastershipRole reply = roleOf(response);
- providerService.receivedRoleReply(deviceId(uri(dpid)), request, reply);
- }
-
- /**
- * Translates a RoleState to the corresponding MastershipRole.
- *
- * @param response role state
- * @return a MastershipRole
- */
- private MastershipRole roleOf(RoleState response) {
- switch (response) {
- case MASTER:
- return MastershipRole.MASTER;
- case EQUAL:
- return MastershipRole.STANDBY;
- case SLAVE:
- return MastershipRole.NONE;
- default:
- LOG.warn("unknown role {}", response);
- return null;
- }
- }
-
- /**
- * Builds a list of port descriptions for a given list of ports.
- *
- * @return list of portdescriptions
- */
- private List<PortDescription> buildPortDescriptions(OpenFlowSwitch sw) {
- final List<PortDescription> portDescs = new ArrayList<>(sw.getPorts().size());
- if (!(Device.Type.ROADM.equals(sw.deviceType()))) {
- sw.getPorts().forEach(port -> portDescs.add(buildPortDescription(port)));
- }
-
- OpenFlowOpticalSwitch opsw;
- switch (sw.deviceType()) {
- case ROADM:
- opsw = (OpenFlowOpticalSwitch) sw;
- List<OFPortDesc> ports = opsw.getPorts();
- LOG.debug("SW ID {} , ETH- ODU CLT Ports {}", opsw.getId(), ports);
- // ODU client ports are reported as ETH
- ports.forEach(port -> portDescs.add(buildOduCltPortDescription(port)));
-
- opsw.getPortTypes().forEach(type -> {
- List<? extends OFObject> portsOf = opsw.getPortsOf(type);
- LOG.debug("Ports Of{}", portsOf);
- portsOf.forEach(
- op -> {
- portDescs.add(buildPortDescription(type, (OFObject) op));
- }
- );
- });
- break;
- case FIBER_SWITCH:
- opsw = (OpenFlowOpticalSwitch) sw;
- opsw.getPortTypes().forEach(type -> {
- opsw.getPortsOf(type).forEach(
- op -> {
- portDescs.add(buildPortDescription((OFCalientPortDescStatsEntry) op));
- }
- );
- });
- break;
- default:
- break;
- }
-
- return portDescs;
- }
-
- private PortDescription buildOduCltPortDescription(OFPortDesc port) {
- PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
- boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) &&
- !port.getConfig().contains(OFPortConfig.PORT_DOWN);
- Long portSpeed = portSpeed(port);
- OduCltPort.SignalType sigType = null;
-
- switch (portSpeed.toString()) {
- case "1":
- sigType = OduCltPort.SignalType.CLT_1GBE;
- break;
- case "10":
- sigType = OduCltPort.SignalType.CLT_10GBE;
- break;
- case "40":
- sigType = OduCltPort.SignalType.CLT_40GBE;
- break;
- case "100":
- sigType = OduCltPort.SignalType.CLT_100GBE;
- break;
- default:
- throw new RuntimeException("Un recognize OduClt speed: " + portSpeed.toString());
- }
-
- SparseAnnotations annotations = buildOduCltAnnotation(port);
- return new OduCltPortDescription(portNo, enabled, sigType, annotations);
- }
-
- private SparseAnnotations buildOduCltAnnotation(OFPortDesc port) {
- SparseAnnotations annotations = null;
- String portName = Strings.emptyToNull(port.getName());
- if (portName != null) {
- annotations = DefaultAnnotations.builder()
- .set(AnnotationKeys.PORT_NAME, portName)
- .set(AnnotationKeys.STATIC_PORT, Boolean.TRUE.toString()).build();
- }
- return annotations;
- }
-
- private PortDescription buildPortDescription(PortDescPropertyType ptype, OFObject port) {
- if (port instanceof OFPortOptical) {
- return buildPortDescription(ptype, (OFPortOptical) port);
- }
- return buildPortDescription(ptype, (OFExpPort) port);
- }
-
- /**
- * Build a portDescription from a given a port description describing some
- * Optical port.
- *
- * @param ptype description property type.
- * @param port the port to build from.
- * @return portDescription for the port.
- */
- private PortDescription buildPortDescription(PortDescPropertyType ptype, OFExpPort port) {
- PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
- boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN)
- && !port.getConfig().contains(OFPortConfig.PORT_DOWN);
- SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString());
-
- OFExpPortDescPropOpticalTransport firstProp = port.getProperties().get(0);
- OFPortOpticalTransportSignalType sigType = firstProp.getPortSignalType();
-
- DefaultPortDescription portDes = null;
- switch (sigType) {
- case OMSN:
- portDes = new OmsPortDescription(portNo, enabled, FREQ193_1, FREQ193_1.add(FREQ4_4),
- FREQ100, annotations);
- break;
- case OCH:
- OFExpPortOpticalTransportLayerEntry entry = firstProp.getFeatures().get(0).getValue().get(0);
- OFPortOpticalTransportLayerClass layerClass = entry.getLayerClass();
- if (!OFPortOpticalTransportLayerClass.ODU.equals(layerClass)) {
- LOG.error("Unsupported layer Class {} ", layerClass);
- return null;
- }
-
- // convert to ONOS OduSignalType
- OduSignalType oduSignalType = OpenFlowDeviceValueMapper.
- lookupOduSignalType((byte) entry.getSignalType());
- //OchSignal is needed for OchPortDescription constructor,
- //yet not relevant for tunable OCH port, creating with default parameters
- OchSignal signalId = new OchSignal(GridType.DWDM, ChannelSpacing.CHL_50GHZ, 1, 1);
-
- portDes = new OchPortDescription(portNo, enabled,
- oduSignalType, true, signalId, annotations);
-
- break;
- case OTU2:
- case OTU4:
- LOG.error("Signal tpye OTU2/4 not supported yet ", port.toString());
- break;
- default:
- break;
- }
-
- return portDes;
- }
-
- /**
- * Creates an annotation for the port name if one is available.
- *
- * @param portName the port name
- * @param portMac the port mac
- * @return annotation containing the port name if one is found,
- * null otherwise
- */
- private SparseAnnotations makePortAnnotation(String portName, String portMac) {
- SparseAnnotations annotations = null;
- String pName = Strings.emptyToNull(portName);
- String pMac = Strings.emptyToNull(portMac);
- if (portName != null) {
- annotations = DefaultAnnotations.builder()
- .set(AnnotationKeys.PORT_NAME, pName)
- .set(AnnotationKeys.PORT_MAC, pMac).build();
- }
- return annotations;
- }
-
- /**
- * Build a portDescription from a given Ethernet port description.
- *
- * @param port the port to build from.
- * @return portDescription for the port.
- */
- private PortDescription buildPortDescription(OFPortDesc port) {
- PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
- boolean enabled =
- !port.getState().contains(OFPortState.LINK_DOWN) &&
- !port.getConfig().contains(OFPortConfig.PORT_DOWN);
- Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER;
- SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString());
- return new DefaultPortDescription(portNo, enabled, type,
- portSpeed(port), annotations);
- }
-
- /**
- * Build a portDescription from a given a port description describing some
- * Optical port.
- *
- * @param port description property type.
- * @param port the port to build from.
- * @return portDescription for the port.
- */
- private PortDescription buildPortDescription(PortDescPropertyType ptype, OFPortOptical port) {
- checkArgument(port.getDesc().size() >= 1);
-
- // Minimally functional fixture. This needs to be fixed as we add better support.
- PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
-
- boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN)
- && !port.getConfig().contains(OFPortConfig.PORT_DOWN);
- SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString());
-
- if (port.getVersion() == OFVersion.OF_13
- && ptype == PortDescPropertyType.OPTICAL_TRANSPORT) {
- // At this point, not much is carried in the optical port message.
- LOG.debug("Optical transport port message {}", port.toString());
- } else {
- // removable once 1.4+ support complete.
- LOG.debug("Unsupported optical port properties");
- }
-
- OFPortDescPropOpticalTransport desc = port.getDesc().get(0);
- switch (desc.getPortSignalType()) {
- // FIXME: use constants once loxi has full optical extensions
- case 2: // OMS port
- // Assume complete optical spectrum and 50 GHz grid
- // LINC-OE is only supported optical OF device for now
- return new OmsPortDescription(portNo, enabled,
- Spectrum.U_BAND_MIN, Spectrum.O_BAND_MAX, Frequency.ofGHz(50), annotations);
- case 5: // OCH port
- OchSignal signal = new OchSignal(GridType.DWDM, ChannelSpacing.CHL_50GHZ, 0, 4);
- return new OchPortDescription(portNo, enabled, OduSignalType.ODU4,
- true, signal, annotations);
- default:
- break;
- }
-
- return new DefaultPortDescription(portNo, enabled, FIBER, 0, annotations);
- }
-
- /**
- * Build a portDescription from a given port description describing a fiber switch optical port.
- *
- * @param port description property type.
- * @param port the port to build from.
- * @return portDescription for the port.
- */
- private PortDescription buildPortDescription(OFCalientPortDescStatsEntry port) {
- PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
-
- // FIXME when Calient OF agent reports port status
- boolean enabled = true;
- SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString());
-
- // S160 data sheet
- // Wavelength range: 1260 - 1630 nm, grid is irrelevant for this type of switch
- return new OmsPortDescription(portNo, enabled,
- Spectrum.U_BAND_MIN, Spectrum.O_BAND_MAX, Frequency.ofGHz(100), annotations);
- }
-
- private PortDescription buildPortDescription(OFPortStatus status) {
- OFPortDesc port = status.getDesc();
- if (status.getReason() != OFPortReason.DELETE) {
- return buildPortDescription(port);
- } else {
- PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
- Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER;
- SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString());
- return new DefaultPortDescription(portNo, false, type,
- portSpeed(port), annotations);
- }
- }
-
- private long portSpeed(OFPortDesc port) {
- if (port.getVersion() == OFVersion.OF_13) {
- return port.getCurrSpeed() / MBPS;
- }
-
- PortSpeed portSpeed = PortSpeed.SPEED_NONE;
- for (OFPortFeatures feat : port.getCurr()) {
- portSpeed = PortSpeed.max(portSpeed, feat.getPortSpeed());
- }
- return portSpeed.getSpeedBps() / MBPS;
- }
-
- @Override
- public void handleMessage(Dpid dpid, OFMessage msg) {
- switch (msg.getType()) {
- case STATS_REPLY:
- if (((OFStatsReply) msg).getStatsType() == OFStatsType.PORT) {
- OFPortStatsReply portStatsReply = (OFPortStatsReply) msg;
- List<OFPortStatsEntry> portStatsReplyList = portStatsReplies.get(dpid);
- if (portStatsReplyList == null) {
- portStatsReplyList = Lists.newArrayList();
- }
- portStatsReplyList.addAll(portStatsReply.getEntries());
- portStatsReplies.put(dpid, portStatsReplyList);
- if (!portStatsReply.getFlags().contains(OFStatsReplyFlags.REPLY_MORE)) {
- pushPortMetrics(dpid, portStatsReplies.get(dpid));
- portStatsReplies.get(dpid).clear();
- }
- }
- break;
- default:
- break;
- }
- }
- }
-}
diff --git a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceValueMapper.java b/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceValueMapper.java
deleted file mode 100644
index 7bdf06fd..00000000
--- a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceValueMapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.of.device.impl;
-
-import org.onosproject.net.OduSignalType;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.EnumHashBiMap;
-
-/**
- * Collection of helper methods to convert protocol agnostic models to values used in OpenFlow spec.
- */
-final class OpenFlowDeviceValueMapper {
-
- // prohibit instantiation
- private OpenFlowDeviceValueMapper() {}
-
- private static final BiMap<OduSignalType, Byte> ODU_SIGNAL_TYPES = EnumHashBiMap.create(OduSignalType.class);
- static {
- // See ONF "Optical Transport Protocol Extensions Version 1.0" for the following values
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU1, (byte) 1); // OFPODUT_ODU1 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU2, (byte) 2); // OFPODUT_ODU2 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU3, (byte) 3); // OFPODUT_ODU3 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU4, (byte) 4); // OFPODUT_ODU4 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU0, (byte) 10); // OFPODUT_ODU0 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU2e, (byte) 11); // OFPODUT_ODU2E of enum ofp_odu_signal_type
- }
-
- /**
- * Looks up the specified input value to the corresponding value with the specified map.
- *
- * @param map bidirectional mapping
- * @param input input value
- * @param cls class of output value
- * @param <I> type of input value
- * @param <O> type of output value
- * @return the corresponding value stored in the specified map
- */
- private static <I, O> O lookup(BiMap<I, O> map, I input, Class<O> cls) {
- if (!map.containsKey(input)) {
- throw new RuntimeException(
- String.format("No mapping found for %s when converting to %s", input, cls.getName()));
- }
-
- return map.get(input);
- }
-
- /**
- * Looks up the the corresponding {@link OduSignalType} instance
- * from the specified byte value for ODU signal type defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0".
- *
- * @param signalType byte value as ODU (Optical channel Data Unit) signal type defined the spec
- * @return the corresponding OchSignalType instance
- */
- static OduSignalType lookupOduSignalType(byte signalType) {
- return lookup(ODU_SIGNAL_TYPES.inverse(), signalType, OduSignalType.class);
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/PortStatsCollector.java b/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/PortStatsCollector.java
deleted file mode 100644
index 8383fa3f..00000000
--- a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/PortStatsCollector.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.of.device.impl;
-
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.util.Timer;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFPortStatsRequest;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.slf4j.Logger;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/*
- * Sends Group Stats Request and collect the group statistics with a time interval.
- */
-public class PortStatsCollector implements TimerTask {
-
- // TODO: Refactoring is required using ScheduledExecutorService
-
- private final HashedWheelTimer timer = Timer.getTimer();
- private final OpenFlowSwitch sw;
- private final Logger log = getLogger(getClass());
- private int refreshInterval;
- private final AtomicLong xidAtomic = new AtomicLong(1);
-
- private Timeout timeout;
- private volatile boolean stopped;
-
- /**
- * Creates a GroupStatsCollector object.
- *
- * @param sw Open Flow switch
- * @param interval time interval for collecting group statistic
- */
- public PortStatsCollector(OpenFlowSwitch sw, int interval) {
- this.sw = sw;
- this.refreshInterval = interval;
- }
-
- @Override
- public void run(Timeout to) throws Exception {
- if (stopped || timeout.isCancelled()) {
- return;
- }
- log.trace("Collecting stats for {}", sw.getStringId());
-
- sendPortStatistic();
-
- if (!stopped && !timeout.isCancelled()) {
- log.trace("Scheduling stats collection in {} seconds for {}",
- this.refreshInterval, this.sw.getStringId());
- timeout.getTimer().newTimeout(this, refreshInterval, TimeUnit.SECONDS);
- }
- }
-
- synchronized void adjustPollInterval(int pollInterval) {
- this.refreshInterval = pollInterval;
- // task.cancel();
- // task = new InternalTimerTask();
- // timer.scheduleAtFixedRate(task, pollInterval * SECONDS, pollInterval * 1000);
- }
-
- private void sendPortStatistic() {
- if (sw.getRole() != RoleState.MASTER) {
- return;
- }
- Long statsXid = xidAtomic.getAndIncrement();
- OFPortStatsRequest statsRequest = sw.factory().buildPortStatsRequest()
- .setPortNo(OFPort.ANY)
- .setXid(statsXid)
- .build();
- sw.sendMsg(statsRequest);
- }
-
- /**
- * Starts the collector.
- */
- public synchronized void start() {
- log.info("Starting Port Stats collection thread for {}", sw.getStringId());
- stopped = false;
- timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
- }
-
- /**
- * Stops the collector.
- */
- public synchronized void stop() {
- log.info("Stopping Port Stats collection thread for {}", sw.getStringId());
- stopped = true;
- timeout.cancel();
- }
-}
diff --git a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/package-info.java b/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/package-info.java
deleted file mode 100644
index 9376b47d..00000000
--- a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/package-info.java
+++ /dev/null
@@ -1,20 +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.
- */
-
-/**
- * Provider that uses OpenFlow controller as a means of infrastructure device discovery.
- */
-package org.onosproject.provider.of.device.impl;
diff --git a/framework/src/onos/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java b/framework/src/onos/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java
deleted file mode 100644
index d0838bb8..00000000
--- a/framework/src/onos/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright 2014-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.of.device.impl;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Multimap;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.cfg.ComponentConfigAdapter;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.device.PortStatistics;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.PacketListener;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFPortDesc;
-import org.projectfloodlight.openflow.protocol.OFPortReason;
-import org.projectfloodlight.openflow.protocol.OFPortStatus;
-import org.projectfloodlight.openflow.protocol.ver10.OFFactoryVer10;
-import org.projectfloodlight.openflow.types.OFPort;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.junit.Assert.*;
-import static org.onosproject.net.Device.Type.SWITCH;
-import static org.onosproject.net.MastershipRole.*;
-
-public class OpenFlowDeviceProviderTest {
-
- private static final ProviderId PID = new ProviderId("of", "test");
- private static final DeviceId DID1 = DeviceId.deviceId("of:0000000000000001");
- private static final Dpid DPID1 = Dpid.dpid(DID1.uri());
-
- private static final OFPortDesc PD1 = portDesc(1);
- private static final OFPortDesc PD2 = portDesc(2);
- private static final OFPortDesc PD3 = portDesc(3);
-
- private static final List<OFPortDesc> PLIST = Lists.newArrayList(PD1, PD2);
-
- private static final Device DEV1 =
- new DefaultDevice(PID, DID1, SWITCH, "", "", "", "", null);
-
- private static final TestOpenFlowSwitch SW1 = new TestOpenFlowSwitch();
-
- private final OpenFlowDeviceProvider provider = new OpenFlowDeviceProvider();
- private final TestDeviceRegistry registry = new TestDeviceRegistry();
- private final TestController controller = new TestController();
-
- @Before
- public void startUp() {
- provider.providerRegistry = registry;
- provider.controller = controller;
- provider.cfgService = new ComponentConfigAdapter();
- controller.switchMap.put(DPID1, SW1);
- provider.activate(null);
- assertNotNull("provider should be registered", registry.provider);
- assertNotNull("listener should be registered", controller.listener);
- assertEquals("devices not added", 1, registry.connected.size());
- assertEquals("ports not added", 2, registry.ports.get(DID1).size());
- }
-
- @After
- public void tearDown() {
- provider.deactivate(null);
- assertNull("listener should be removed", controller.listener);
- provider.controller = null;
- provider.providerRegistry = null;
- }
-
- @Test
- public void roleChanged() {
- provider.roleChanged(DID1, MASTER);
- assertEquals("Should be MASTER", RoleState.MASTER, controller.roleMap.get(DPID1));
- provider.roleChanged(DID1, STANDBY);
- assertEquals("Should be EQUAL", RoleState.EQUAL, controller.roleMap.get(DPID1));
- provider.roleChanged(DID1, NONE);
- assertEquals("Should be SLAVE", RoleState.SLAVE, controller.roleMap.get(DPID1));
- }
-
- @Test
- public void triggerProbe() {
-
- }
-
- @Test
- public void switchRemoved() {
- controller.listener.switchRemoved(DPID1);
- assertTrue("device not removed", registry.connected.isEmpty());
- }
-
- @Test
- public void portChanged() {
- OFPortStatus stat = SW1.factory().buildPortStatus()
- .setReason(OFPortReason.ADD)
- .setDesc(PD3)
- .build();
- controller.listener.portChanged(DPID1, stat);
- assertNotNull("never went throught the provider service", registry.descr);
- assertEquals("port status unhandled", 3, registry.ports.get(DID1).size());
- }
-
- @Test
- public void receivedRoleReply() {
- // check translation capabilities
- controller.listener.receivedRoleReply(DPID1, RoleState.MASTER, RoleState.MASTER);
- assertEquals("wrong role reported", DPID1, registry.roles.get(MASTER));
- controller.listener.receivedRoleReply(DPID1, RoleState.EQUAL, RoleState.MASTER);
- assertEquals("wrong role reported", DPID1, registry.roles.get(STANDBY));
- controller.listener.receivedRoleReply(DPID1, RoleState.SLAVE, RoleState.MASTER);
- assertEquals("wrong role reported", DPID1, registry.roles.get(NONE));
- }
-
- private static OFPortDesc portDesc(int port) {
- OFPortDesc.Builder builder = OFFactoryVer10.INSTANCE.buildPortDesc();
- builder.setPortNo(OFPort.of(port));
-
- return builder.build();
- }
-
- private class TestDeviceRegistry implements DeviceProviderRegistry {
- DeviceProvider provider;
-
- Set<DeviceId> connected = new HashSet<>();
- Multimap<DeviceId, PortDescription> ports = HashMultimap.create();
- PortDescription descr = null;
- Map<MastershipRole, Dpid> roles = new HashMap<>();
-
- @Override
- public DeviceProviderService register(DeviceProvider provider) {
- this.provider = provider;
- return new TestProviderService();
- }
-
- @Override
- public void unregister(DeviceProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- private class TestProviderService implements DeviceProviderService {
-
- @Override
- public DeviceProvider provider() {
- return null;
- }
-
- @Override
- public void deviceConnected(DeviceId deviceId,
- DeviceDescription deviceDescription) {
- connected.add(deviceId);
- }
-
- @Override
- public void deviceDisconnected(DeviceId deviceId) {
- connected.remove(deviceId);
- ports.removeAll(deviceId);
- }
-
- @Override
- public void updatePorts(DeviceId deviceId,
- List<PortDescription> portDescriptions) {
- for (PortDescription p : portDescriptions) {
- ports.put(deviceId, p);
- }
- }
-
- @Override
- public void portStatusChanged(DeviceId deviceId,
- PortDescription portDescription) {
- ports.put(deviceId, portDescription);
- descr = portDescription;
- }
-
- @Override
- public void receivedRoleReply(DeviceId deviceId,
- MastershipRole requested, MastershipRole response) {
- roles.put(requested, Dpid.dpid(deviceId.uri()));
- }
-
- @Override
- public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
-
- }
-
- }
- }
-
- private class TestController implements OpenFlowController {
- OpenFlowSwitchListener listener = null;
- Map<Dpid, RoleState> roleMap = new HashMap<Dpid, RoleState>();
- Map<Dpid, OpenFlowSwitch> switchMap = new HashMap<Dpid, OpenFlowSwitch>();
-
- @Override
- public Iterable<OpenFlowSwitch> getSwitches() {
- return switchMap.values();
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getMasterSwitches() {
- return ImmutableSet.of();
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getEqualSwitches() {
- return null;
- }
-
- @Override
- public OpenFlowSwitch getSwitch(Dpid dpid) {
- return switchMap.get(dpid);
- }
-
- @Override
- public OpenFlowSwitch getMasterSwitch(Dpid dpid) {
- return null;
- }
-
- @Override
- public OpenFlowSwitch getEqualSwitch(Dpid dpid) {
-
- return null;
- }
-
- @Override
- public void addListener(OpenFlowSwitchListener listener) {
- this.listener = listener;
- }
-
- @Override
- public void removeListener(OpenFlowSwitchListener listener) {
- this.listener = null;
- }
-
- @Override
- public void addPacketListener(int priority, PacketListener listener) {
- }
-
- @Override
- public void removePacketListener(PacketListener listener) {
- }
-
- @Override
- public void addEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void removeEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void write(Dpid dpid, OFMessage msg) {
- }
-
- @Override
- public void processPacket(Dpid dpid, OFMessage msg) {
- }
-
- @Override
- public void setRole(Dpid dpid, RoleState role) {
- roleMap.put(dpid, role);
- }
- }
-
- private static class TestOpenFlowSwitch implements OpenFlowSwitch {
-
- RoleState state;
- List<OFMessage> sent = new ArrayList<OFMessage>();
- OFFactory factory = OFFactoryVer10.INSTANCE;
-
- @Override
- public void sendMsg(OFMessage msg) {
- sent.add(msg);
- }
-
- @Override
- public void sendMsg(List<OFMessage> msgs) {
- }
-
- @Override
- public void handleMessage(OFMessage fromSwitch) {
- }
-
- @Override
- public void setRole(RoleState role) {
- state = role;
- }
-
- @Override
- public RoleState getRole() {
- return state;
- }
-
- @Override
- public List<OFPortDesc> getPorts() {
- return PLIST;
- }
-
- @Override
- public OFFactory factory() {
- return factory;
- }
-
- @Override
- public String getStringId() {
- return null;
- }
-
- @Override
- public long getId() {
- return DPID1.value();
- }
-
- @Override
- public String manufacturerDescription() {
- return null;
- }
-
- @Override
- public String datapathDescription() {
- return null;
- }
-
- @Override
- public String hardwareDescription() {
- return null;
- }
-
- @Override
- public String softwareDescription() {
- return null;
- }
-
- @Override
- public String serialNumber() {
- return null;
- }
-
- @Override
- public boolean isConnected() {
- return true;
- }
-
- @Override
- public void disconnectSwitch() {
- }
-
- @Override
- public Device.Type deviceType() {
- return Device.Type.SWITCH;
- }
-
- @Override
- public void returnRoleReply(RoleState requested, RoleState response) {
- }
-
- @Override
- public String channelId() {
- return "1.2.3.4:1";
- }
-
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/pom.xml b/framework/src/onos/providers/openflow/flow/pom.xml
deleted file mode 100644
index 16d7d32d..00000000
--- a/framework/src/onos/providers/openflow/flow/pom.xml
+++ /dev/null
@@ -1,40 +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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-of-provider-flow</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS OpenFlow protocol flow provider</description>
-
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
deleted file mode 100644
index b12d8a60..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
- * Copyright 2014-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.of.flow.impl;
-
-import com.google.common.collect.Lists;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.Ip4Prefix;
-import org.onlab.packet.Ip6Address;
-import org.onlab.packet.Ip6Prefix;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.MplsLabel;
-import org.onlab.packet.TpPort;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Lambda;
-import org.onosproject.net.OduSignalId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.driver.DefaultDriverData;
-import org.onosproject.net.driver.DefaultDriverHandler;
-import org.onosproject.net.driver.Driver;
-import org.onosproject.net.driver.DriverHandler;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.flow.DefaultFlowEntry;
-import org.onosproject.net.flow.DefaultFlowRule;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowEntry.FlowEntryState;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter;
-import org.projectfloodlight.openflow.protocol.OFFlowMod;
-import org.projectfloodlight.openflow.protocol.OFFlowRemoved;
-import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
-import org.projectfloodlight.openflow.protocol.action.OFActionCircuit;
-import org.projectfloodlight.openflow.protocol.action.OFActionEnqueue;
-import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter;
-import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
-import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
-import org.projectfloodlight.openflow.protocol.action.OFActionPopMpls;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetDlDst;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetDlSrc;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetField;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetNwDst;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetNwSrc;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetQueue;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetVlanPcp;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetVlanVid;
-import org.projectfloodlight.openflow.protocol.instruction.OFInstruction;
-import org.projectfloodlight.openflow.protocol.instruction.OFInstructionApplyActions;
-import org.projectfloodlight.openflow.protocol.instruction.OFInstructionGotoTable;
-import org.projectfloodlight.openflow.protocol.instruction.OFInstructionWriteActions;
-import org.projectfloodlight.openflow.protocol.instruction.OFInstructionWriteMetadata;
-import org.projectfloodlight.openflow.protocol.match.Match;
-import org.projectfloodlight.openflow.protocol.match.MatchField;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxmOchSigidBasic;
-import org.projectfloodlight.openflow.protocol.ver13.OFFactoryVer13;
-import org.projectfloodlight.openflow.types.CircuitSignalID;
-import org.projectfloodlight.openflow.types.IPv4Address;
-import org.projectfloodlight.openflow.types.IPv6Address;
-import org.projectfloodlight.openflow.types.Masked;
-import org.projectfloodlight.openflow.types.OFVlanVidMatch;
-import org.projectfloodlight.openflow.types.TransportPort;
-import org.projectfloodlight.openflow.types.U32;
-import org.projectfloodlight.openflow.types.U64;
-import org.projectfloodlight.openflow.types.U8;
-import org.projectfloodlight.openflow.types.VlanPcp;
-import org.projectfloodlight.openflow.types.OduSignalID;
-import org.slf4j.Logger;
-
-import java.util.List;
-
-import static org.onosproject.net.flow.criteria.Criteria.matchLambda;
-import static org.onosproject.net.flow.criteria.Criteria.matchOchSignalType;
-import static org.onosproject.net.flow.criteria.Criteria.matchOduSignalType;
-import static org.onosproject.net.flow.criteria.Criteria.matchOduSignalId;
-import static org.onosproject.net.flow.instructions.Instructions.modL0Lambda;
-import static org.onosproject.net.flow.instructions.Instructions.modL1OduSignalId;
-import static org.onosproject.provider.of.flow.impl.OpenFlowValueMapper.lookupChannelSpacing;
-import static org.onosproject.provider.of.flow.impl.OpenFlowValueMapper.lookupGridType;
-import static org.onosproject.provider.of.flow.impl.OpenFlowValueMapper.lookupOchSignalType;
-import static org.onosproject.provider.of.flow.impl.OpenFlowValueMapper.lookupOduSignalType;
-import static org.slf4j.LoggerFactory.getLogger;
-
-public class FlowEntryBuilder {
- private final Logger log = getLogger(getClass());
-
- private final OFFlowStatsEntry stat;
- private final OFFlowRemoved removed;
- private final OFFlowMod flowMod;
-
- private final Match match;
-
- // All actions are contained in an OFInstruction. For OF1.0
- // the instruction type is apply instruction (immediate set in ONOS speak)
- private final List<OFInstruction> instructions;
-
- private final Dpid dpid;
-
- public enum FlowType { STAT, REMOVED, MOD }
-
- private final FlowType type;
-
- private final DriverService driverService;
-
- public FlowEntryBuilder(Dpid dpid, OFFlowStatsEntry entry, DriverService driverService) {
- this.stat = entry;
- this.match = entry.getMatch();
- this.instructions = getInstructions(entry);
- this.dpid = dpid;
- this.removed = null;
- this.flowMod = null;
- this.type = FlowType.STAT;
- this.driverService = driverService;
- }
-
- public FlowEntryBuilder(Dpid dpid, OFFlowRemoved removed, DriverService driverService) {
- this.match = removed.getMatch();
- this.removed = removed;
-
- this.dpid = dpid;
- this.instructions = null;
- this.stat = null;
- this.flowMod = null;
- this.type = FlowType.REMOVED;
- this.driverService = driverService;
- }
-
- public FlowEntryBuilder(Dpid dpid, OFFlowMod fm, DriverService driverService) {
- this.match = fm.getMatch();
- this.dpid = dpid;
- this.instructions = getInstructions(fm);
- this.type = FlowType.MOD;
- this.flowMod = fm;
- this.stat = null;
- this.removed = null;
- this.driverService = driverService;
- }
-
- public FlowEntry build(FlowEntryState... state) {
- FlowRule rule;
- switch (this.type) {
- case STAT:
- rule = DefaultFlowRule.builder()
- .forDevice(DeviceId.deviceId(Dpid.uri(dpid)))
- .withSelector(buildSelector())
- .withTreatment(buildTreatment())
- .withPriority(stat.getPriority())
- .makeTemporary(stat.getIdleTimeout())
- .withCookie(stat.getCookie().getValue())
- .forTable(stat.getTableId().getValue())
- .build();
-
- return new DefaultFlowEntry(rule, FlowEntryState.ADDED,
- stat.getDurationSec(), stat.getPacketCount().getValue(),
- stat.getByteCount().getValue());
- case REMOVED:
- rule = DefaultFlowRule.builder()
- .forDevice(DeviceId.deviceId(Dpid.uri(dpid)))
- .withSelector(buildSelector())
- .withPriority(removed.getPriority())
- .makeTemporary(removed.getIdleTimeout())
- .withCookie(removed.getCookie().getValue())
- .forTable(removed.getTableId().getValue())
- .build();
-
- return new DefaultFlowEntry(rule, FlowEntryState.REMOVED, removed.getDurationSec(),
- removed.getPacketCount().getValue(), removed.getByteCount().getValue());
- case MOD:
- FlowEntryState flowState = state.length > 0 ? state[0] : FlowEntryState.FAILED;
- rule = DefaultFlowRule.builder()
- .forDevice(DeviceId.deviceId(Dpid.uri(dpid)))
- .withSelector(buildSelector())
- .withTreatment(buildTreatment())
- .withPriority(flowMod.getPriority())
- .makeTemporary(flowMod.getIdleTimeout())
- .withCookie(flowMod.getCookie().getValue())
- .forTable(flowMod.getTableId().getValue())
- .build();
-
- return new DefaultFlowEntry(rule, flowState, 0, 0, 0);
- default:
- log.error("Unknown flow type : {}", this.type);
- return null;
- }
-
- }
-
- private List<OFInstruction> getInstructions(OFFlowMod entry) {
- switch (entry.getVersion()) {
- case OF_10:
- return Lists.newArrayList(OFFactoryVer13.INSTANCE.instructions()
- .applyActions(
- entry.getActions()));
- case OF_11:
- case OF_12:
- case OF_13:
- return entry.getInstructions();
- default:
- log.warn("Unknown OF version {}", entry.getVersion());
- }
- return Lists.newLinkedList();
- }
-
- private List<OFInstruction> getInstructions(OFFlowStatsEntry entry) {
- switch (entry.getVersion()) {
- case OF_10:
- return Lists.newArrayList(
- OFFactoryVer13.INSTANCE.instructions().applyActions(entry.getActions()));
- case OF_11:
- case OF_12:
- case OF_13:
- return entry.getInstructions();
- default:
- log.warn("Unknown OF version {}", entry.getVersion());
- }
- return Lists.newLinkedList();
- }
-
- private TrafficTreatment buildTreatment() {
- TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
- for (OFInstruction in : instructions) {
- switch (in.getType()) {
- case GOTO_TABLE:
- builder.transition(((int) ((OFInstructionGotoTable) in)
- .getTableId().getValue()));
- break;
- case WRITE_METADATA:
- OFInstructionWriteMetadata m = (OFInstructionWriteMetadata) in;
- builder.writeMetadata(m.getMetadata().getValue(),
- m.getMetadataMask().getValue());
- break;
- case WRITE_ACTIONS:
- builder.deferred();
- buildActions(((OFInstructionWriteActions) in).getActions(),
- builder);
- break;
- case APPLY_ACTIONS:
- builder.immediate();
- buildActions(((OFInstructionApplyActions) in).getActions(),
- builder);
- break;
- case CLEAR_ACTIONS:
- builder.wipeDeferred();
- break;
- case EXPERIMENTER:
- break;
- case METER:
- break;
- default:
- log.warn("Unknown instructions type {}", in.getType());
- }
- }
-
- return builder.build();
- }
-
- private TrafficTreatment.Builder buildActions(List<OFAction> actions,
- TrafficTreatment.Builder builder) {
- for (OFAction act : actions) {
- switch (act.getType()) {
- case OUTPUT:
- OFActionOutput out = (OFActionOutput) act;
- builder.setOutput(
- PortNumber.portNumber(out.getPort().getPortNumber()));
- break;
- case SET_VLAN_VID:
- OFActionSetVlanVid vlan = (OFActionSetVlanVid) act;
- builder.setVlanId(VlanId.vlanId(vlan.getVlanVid().getVlan()));
- break;
- case SET_VLAN_PCP:
- OFActionSetVlanPcp pcp = (OFActionSetVlanPcp) act;
- builder.setVlanPcp(pcp.getVlanPcp().getValue());
- break;
- case SET_DL_DST:
- OFActionSetDlDst dldst = (OFActionSetDlDst) act;
- builder.setEthDst(
- MacAddress.valueOf(dldst.getDlAddr().getLong()));
- break;
- case SET_DL_SRC:
- OFActionSetDlSrc dlsrc = (OFActionSetDlSrc) act;
- builder.setEthSrc(
- MacAddress.valueOf(dlsrc.getDlAddr().getLong()));
-
- break;
- case SET_NW_DST:
- OFActionSetNwDst nwdst = (OFActionSetNwDst) act;
- IPv4Address di = nwdst.getNwAddr();
- builder.setIpDst(Ip4Address.valueOf(di.getInt()));
- break;
- case SET_NW_SRC:
- OFActionSetNwSrc nwsrc = (OFActionSetNwSrc) act;
- IPv4Address si = nwsrc.getNwAddr();
- builder.setIpSrc(Ip4Address.valueOf(si.getInt()));
- break;
- case EXPERIMENTER:
- OFActionExperimenter exp = (OFActionExperimenter) act;
- if (exp.getExperimenter() == 0x80005A06 ||
- exp.getExperimenter() == 0x748771) {
- OFActionCircuit ct = (OFActionCircuit) exp;
- short lambda = ((OFOxmOchSigidBasic) ct.getField()).getValue().getChannelNumber();
- builder.add(Instructions.modL0Lambda(Lambda.indexedLambda(lambda)));
- } else {
- log.warn("Unsupported OFActionExperimenter {}", exp.getExperimenter());
- }
- break;
- case SET_FIELD:
- OFActionSetField setField = (OFActionSetField) act;
- handleSetField(builder, setField);
- break;
- case POP_MPLS:
- OFActionPopMpls popMpls = (OFActionPopMpls) act;
- builder.popMpls((short) popMpls.getEthertype().getValue());
- break;
- case PUSH_MPLS:
- builder.pushMpls();
- break;
- case COPY_TTL_IN:
- builder.copyTtlIn();
- break;
- case COPY_TTL_OUT:
- builder.copyTtlOut();
- break;
- case DEC_MPLS_TTL:
- builder.decMplsTtl();
- break;
- case DEC_NW_TTL:
- builder.decNwTtl();
- break;
- case GROUP:
- OFActionGroup group = (OFActionGroup) act;
- builder.group(new DefaultGroupId(group.getGroup().getGroupNumber()));
- break;
- case SET_QUEUE:
- OFActionSetQueue setQueue = (OFActionSetQueue) act;
- builder.setQueue(setQueue.getQueueId());
- break;
- case ENQUEUE:
- OFActionEnqueue enqueue = (OFActionEnqueue) act;
- builder.setQueue(enqueue.getQueueId(), PortNumber.portNumber(enqueue.getPort().getPortNumber()));
- break;
- case STRIP_VLAN:
- case POP_VLAN:
- builder.popVlan();
- break;
- case PUSH_VLAN:
- builder.pushVlan();
- break;
- case SET_TP_DST:
- case SET_TP_SRC:
- case POP_PBB:
- case PUSH_PBB:
- case SET_MPLS_LABEL:
- case SET_MPLS_TC:
- case SET_MPLS_TTL:
- case SET_NW_ECN:
- case SET_NW_TOS:
- case SET_NW_TTL:
-
- default:
- log.warn("Action type {} not yet implemented.", act.getType());
- }
- }
- return builder;
- }
-
-
- private void handleSetField(TrafficTreatment.Builder builder, OFActionSetField action) {
- OFOxm<?> oxm = action.getField();
- switch (oxm.getMatchField().id) {
- case VLAN_PCP:
- @SuppressWarnings("unchecked")
- OFOxm<VlanPcp> vlanpcp = (OFOxm<VlanPcp>) oxm;
- builder.setVlanPcp(vlanpcp.getValue().getValue());
- break;
- case VLAN_VID:
- @SuppressWarnings("unchecked")
- OFOxm<OFVlanVidMatch> vlanvid = (OFOxm<OFVlanVidMatch>) oxm;
- builder.setVlanId(VlanId.vlanId(vlanvid.getValue().getVlan()));
- break;
- case ETH_DST:
- @SuppressWarnings("unchecked")
- OFOxm<org.projectfloodlight.openflow.types.MacAddress> ethdst =
- (OFOxm<org.projectfloodlight.openflow.types.MacAddress>) oxm;
- builder.setEthDst(MacAddress.valueOf(ethdst.getValue().getLong()));
- break;
- case ETH_SRC:
- @SuppressWarnings("unchecked")
- OFOxm<org.projectfloodlight.openflow.types.MacAddress> ethsrc =
- (OFOxm<org.projectfloodlight.openflow.types.MacAddress>) oxm;
- builder.setEthSrc(MacAddress.valueOf(ethsrc.getValue().getLong()));
- break;
- case IPV4_DST:
- @SuppressWarnings("unchecked")
- OFOxm<IPv4Address> ip4dst = (OFOxm<IPv4Address>) oxm;
- builder.setIpDst(Ip4Address.valueOf(ip4dst.getValue().getInt()));
- break;
- case IPV4_SRC:
- @SuppressWarnings("unchecked")
- OFOxm<IPv4Address> ip4src = (OFOxm<IPv4Address>) oxm;
- builder.setIpSrc(Ip4Address.valueOf(ip4src.getValue().getInt()));
- break;
- case MPLS_LABEL:
- @SuppressWarnings("unchecked")
- OFOxm<U32> labelId = (OFOxm<U32>) oxm;
- builder.setMpls(MplsLabel.mplsLabel((int) labelId.getValue().getValue()));
- break;
- case MPLS_BOS:
- @SuppressWarnings("unchecked")
- OFOxm<U8> mplsBos = (OFOxm<U8>) oxm;
- builder.setMplsBos(mplsBos.getValue() == U8.ZERO ? false : true);
- break;
- case TUNNEL_ID:
- @SuppressWarnings("unchecked")
- OFOxm<U64> tunnelId = (OFOxm<U64>) oxm;
- builder.setTunnelId(tunnelId.getValue().getValue());
- break;
- case TCP_DST:
- @SuppressWarnings("unchecked")
- OFOxm<TransportPort> tcpdst = (OFOxm<TransportPort>) oxm;
- builder.setTcpDst(TpPort.tpPort(tcpdst.getValue().getPort()));
- break;
- case TCP_SRC:
- @SuppressWarnings("unchecked")
- OFOxm<TransportPort> tcpsrc = (OFOxm<TransportPort>) oxm;
- builder.setTcpSrc(TpPort.tpPort(tcpsrc.getValue().getPort()));
- break;
- case UDP_DST:
- @SuppressWarnings("unchecked")
- OFOxm<TransportPort> udpdst = (OFOxm<TransportPort>) oxm;
- builder.setUdpDst(TpPort.tpPort(udpdst.getValue().getPort()));
- break;
- case UDP_SRC:
- @SuppressWarnings("unchecked")
- OFOxm<TransportPort> udpsrc = (OFOxm<TransportPort>) oxm;
- builder.setUdpSrc(TpPort.tpPort(udpsrc.getValue().getPort()));
- break;
- case TUNNEL_IPV4_DST:
- DriverHandler driver = getDriver(dpid);
- ExtensionTreatmentInterpreter interpreter = driver.behaviour(ExtensionTreatmentInterpreter.class);
- if (interpreter != null) {
- builder.extension(interpreter.mapAction(action), DeviceId.deviceId(Dpid.uri(dpid)));
- }
- break;
- case EXP_ODU_SIG_ID:
- @SuppressWarnings("unchecked")
- OFOxm<OduSignalID> oduID = (OFOxm<OduSignalID>) oxm;
- OduSignalID oduSignalID = oduID.getValue();
- OduSignalId oduSignalId = OduSignalId.oduSignalId(oduSignalID.getTpn(),
- oduSignalID.getTslen(),
- oduSignalID.getTsmap());
- builder.add(modL1OduSignalId(oduSignalId));
- break;
- case EXP_OCH_SIG_ID:
- try {
- @SuppressWarnings("unchecked")
- OFOxm<CircuitSignalID> ochId = (OFOxm<CircuitSignalID>) oxm;
- CircuitSignalID circuitSignalID = ochId.getValue();
- builder.add(modL0Lambda(Lambda.ochSignal(
- lookupGridType(circuitSignalID.getGridType()),
- lookupChannelSpacing(circuitSignalID.getChannelSpacing()),
- circuitSignalID.getChannelNumber(), circuitSignalID.getSpectralWidth())));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- break;
- }
- break;
- case ARP_OP:
- case ARP_SHA:
- case ARP_SPA:
- case ARP_THA:
- case ARP_TPA:
- case BSN_EGR_PORT_GROUP_ID:
- case BSN_GLOBAL_VRF_ALLOWED:
- case BSN_IN_PORTS_128:
- case BSN_L3_DST_CLASS_ID:
- case BSN_L3_INTERFACE_CLASS_ID:
- case BSN_L3_SRC_CLASS_ID:
- case BSN_LAG_ID:
- case BSN_TCP_FLAGS:
- case BSN_UDF0:
- case BSN_UDF1:
- case BSN_UDF2:
- case BSN_UDF3:
- case BSN_UDF4:
- case BSN_UDF5:
- case BSN_UDF6:
- case BSN_UDF7:
- case BSN_VLAN_XLATE_PORT_GROUP_ID:
- case BSN_VRF:
- case ETH_TYPE:
- case ICMPV4_CODE:
- case ICMPV4_TYPE:
- case ICMPV6_CODE:
- case ICMPV6_TYPE:
- case IN_PHY_PORT:
- case IN_PORT:
- case IPV6_DST:
- case IPV6_FLABEL:
- case IPV6_ND_SLL:
- case IPV6_ND_TARGET:
- case IPV6_ND_TLL:
- case IPV6_SRC:
- case IP_DSCP:
- case IP_ECN:
- case IP_PROTO:
- case METADATA:
- case MPLS_TC:
- case OCH_SIGID:
- case OCH_SIGID_BASIC:
- case OCH_SIGTYPE:
- case OCH_SIGTYPE_BASIC:
- case SCTP_DST:
- case SCTP_SRC:
- case EXP_ODU_SIGTYPE:
- case EXP_OCH_SIGTYPE:
- default:
- log.warn("Set field type {} not yet implemented.", oxm.getMatchField().id);
- break;
- }
- }
-
- // CHECKSTYLE IGNORE MethodLength FOR NEXT 1 LINES
- private TrafficSelector buildSelector() {
- MacAddress mac;
- Ip4Prefix ip4Prefix;
- Ip6Address ip6Address;
- Ip6Prefix ip6Prefix;
- Ip4Address ip;
-
- TrafficSelector.Builder builder = DefaultTrafficSelector.builder();
- for (MatchField<?> field : match.getMatchFields()) {
- switch (field.id) {
- case IN_PORT:
- builder.matchInPort(PortNumber
- .portNumber(match.get(MatchField.IN_PORT).getPortNumber()));
- break;
- case IN_PHY_PORT:
- builder.matchInPhyPort(PortNumber
- .portNumber(match.get(MatchField.IN_PHY_PORT).getPortNumber()));
- break;
- case METADATA:
- long metadata =
- match.get(MatchField.METADATA).getValue().getValue();
- builder.matchMetadata(metadata);
- break;
- case ETH_DST:
- mac = MacAddress.valueOf(match.get(MatchField.ETH_DST).getLong());
- builder.matchEthDst(mac);
- break;
- case ETH_SRC:
- mac = MacAddress.valueOf(match.get(MatchField.ETH_SRC).getLong());
- builder.matchEthSrc(mac);
- break;
- case ETH_TYPE:
- int ethType = match.get(MatchField.ETH_TYPE).getValue();
- builder.matchEthType((short) ethType);
- break;
- case VLAN_VID:
- VlanId vlanId = null;
- if (match.isPartiallyMasked(MatchField.VLAN_VID)) {
- Masked<OFVlanVidMatch> masked = match.getMasked(MatchField.VLAN_VID);
- if (masked.getValue().equals(OFVlanVidMatch.PRESENT)
- && masked.getMask().equals(OFVlanVidMatch.PRESENT)) {
- vlanId = VlanId.ANY;
- }
- } else {
- if (!match.get(MatchField.VLAN_VID).isPresentBitSet()) {
- vlanId = VlanId.NONE;
- } else {
- vlanId = VlanId.vlanId(match.get(MatchField.VLAN_VID).getVlan());
- }
- }
- if (vlanId != null) {
- builder.matchVlanId(vlanId);
- }
- break;
- case VLAN_PCP:
- byte vlanPcp = match.get(MatchField.VLAN_PCP).getValue();
- builder.matchVlanPcp(vlanPcp);
- break;
- case IP_DSCP:
- byte ipDscp = match.get(MatchField.IP_DSCP).getDscpValue();
- builder.matchIPDscp(ipDscp);
- break;
- case IP_ECN:
- byte ipEcn = match.get(MatchField.IP_ECN).getEcnValue();
- builder.matchIPEcn(ipEcn);
- break;
- case IP_PROTO:
- short proto = match.get(MatchField.IP_PROTO).getIpProtocolNumber();
- builder.matchIPProtocol((byte) proto);
- break;
- case IPV4_SRC:
- if (match.isPartiallyMasked(MatchField.IPV4_SRC)) {
- Masked<IPv4Address> maskedIp = match.getMasked(MatchField.IPV4_SRC);
- ip4Prefix = Ip4Prefix.valueOf(
- maskedIp.getValue().getInt(),
- maskedIp.getMask().asCidrMaskLength());
- } else {
- ip4Prefix = Ip4Prefix.valueOf(
- match.get(MatchField.IPV4_SRC).getInt(),
- Ip4Prefix.MAX_MASK_LENGTH);
- }
- builder.matchIPSrc(ip4Prefix);
- break;
- case IPV4_DST:
- if (match.isPartiallyMasked(MatchField.IPV4_DST)) {
- Masked<IPv4Address> maskedIp = match.getMasked(MatchField.IPV4_DST);
- ip4Prefix = Ip4Prefix.valueOf(
- maskedIp.getValue().getInt(),
- maskedIp.getMask().asCidrMaskLength());
- } else {
- ip4Prefix = Ip4Prefix.valueOf(
- match.get(MatchField.IPV4_DST).getInt(),
- Ip4Prefix.MAX_MASK_LENGTH);
- }
- builder.matchIPDst(ip4Prefix);
- break;
- case TCP_SRC:
- builder.matchTcpSrc(TpPort.tpPort(match.get(MatchField.TCP_SRC).getPort()));
- break;
- case TCP_DST:
- builder.matchTcpDst(TpPort.tpPort(match.get(MatchField.TCP_DST).getPort()));
- break;
- case UDP_SRC:
- builder.matchUdpSrc(TpPort.tpPort(match.get(MatchField.UDP_SRC).getPort()));
- break;
- case UDP_DST:
- builder.matchUdpDst(TpPort.tpPort(match.get(MatchField.UDP_DST).getPort()));
- break;
- case MPLS_LABEL:
- builder.matchMplsLabel(MplsLabel.mplsLabel((int) match.get(MatchField.MPLS_LABEL)
- .getValue()));
- break;
- case MPLS_BOS:
- builder.matchMplsBos(match.get(MatchField.MPLS_BOS).getValue());
- break;
- case SCTP_SRC:
- builder.matchSctpSrc(TpPort.tpPort(match.get(MatchField.SCTP_SRC).getPort()));
- break;
- case SCTP_DST:
- builder.matchSctpDst(TpPort.tpPort(match.get(MatchField.SCTP_DST).getPort()));
- break;
- case ICMPV4_TYPE:
- byte icmpType = (byte) match.get(MatchField.ICMPV4_TYPE).getType();
- builder.matchIcmpType(icmpType);
- break;
- case ICMPV4_CODE:
- byte icmpCode = (byte) match.get(MatchField.ICMPV4_CODE).getCode();
- builder.matchIcmpCode(icmpCode);
- break;
- case IPV6_SRC:
- if (match.isPartiallyMasked(MatchField.IPV6_SRC)) {
- Masked<IPv6Address> maskedIp = match.getMasked(MatchField.IPV6_SRC);
- ip6Prefix = Ip6Prefix.valueOf(
- maskedIp.getValue().getBytes(),
- maskedIp.getMask().asCidrMaskLength());
- } else {
- ip6Prefix = Ip6Prefix.valueOf(
- match.get(MatchField.IPV6_SRC).getBytes(),
- Ip6Prefix.MAX_MASK_LENGTH);
- }
- builder.matchIPv6Src(ip6Prefix);
- break;
- case IPV6_DST:
- if (match.isPartiallyMasked(MatchField.IPV6_DST)) {
- Masked<IPv6Address> maskedIp = match.getMasked(MatchField.IPV6_DST);
- ip6Prefix = Ip6Prefix.valueOf(
- maskedIp.getValue().getBytes(),
- maskedIp.getMask().asCidrMaskLength());
- } else {
- ip6Prefix = Ip6Prefix.valueOf(
- match.get(MatchField.IPV6_DST).getBytes(),
- Ip6Prefix.MAX_MASK_LENGTH);
- }
- builder.matchIPv6Dst(ip6Prefix);
- break;
- case IPV6_FLABEL:
- int flowLabel =
- match.get(MatchField.IPV6_FLABEL).getIPv6FlowLabelValue();
- builder.matchIPv6FlowLabel(flowLabel);
- break;
- case ICMPV6_TYPE:
- byte icmpv6type = (byte) match.get(MatchField.ICMPV6_TYPE).getValue();
- builder.matchIcmpv6Type(icmpv6type);
- break;
- case ICMPV6_CODE:
- byte icmpv6code = (byte) match.get(MatchField.ICMPV6_CODE).getValue();
- builder.matchIcmpv6Code(icmpv6code);
- break;
- case IPV6_ND_TARGET:
- ip6Address =
- Ip6Address.valueOf(match.get(MatchField.IPV6_ND_TARGET).getBytes());
- builder.matchIPv6NDTargetAddress(ip6Address);
- break;
- case IPV6_ND_SLL:
- mac = MacAddress.valueOf(match.get(MatchField.IPV6_ND_SLL).getLong());
- builder.matchIPv6NDSourceLinkLayerAddress(mac);
- break;
- case IPV6_ND_TLL:
- mac = MacAddress.valueOf(match.get(MatchField.IPV6_ND_TLL).getLong());
- builder.matchIPv6NDTargetLinkLayerAddress(mac);
- break;
- case IPV6_EXTHDR:
- builder.matchIPv6ExthdrFlags((short) match.get(MatchField.IPV6_EXTHDR)
- .getValue());
- break;
- case OCH_SIGID:
- CircuitSignalID sigId = match.get(MatchField.OCH_SIGID);
- builder.add(matchLambda(Lambda.ochSignal(
- lookupGridType(sigId.getGridType()), lookupChannelSpacing(sigId.getChannelSpacing()),
- sigId.getChannelNumber(), sigId.getSpectralWidth())
- ));
- break;
- case OCH_SIGTYPE:
- U8 sigType = match.get(MatchField.OCH_SIGTYPE);
- builder.add(matchOchSignalType(lookupOchSignalType((byte) sigType.getValue())));
- break;
- case EXP_OCH_SIG_ID:
- try {
- CircuitSignalID expSigId = match.get(MatchField.EXP_OCH_SIG_ID);
- builder.add(matchLambda(Lambda.ochSignal(
- lookupGridType(expSigId.getGridType()), lookupChannelSpacing(expSigId.getChannelSpacing()),
- expSigId.getChannelNumber(), expSigId.getSpectralWidth())));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- break;
- }
- break;
- case EXP_OCH_SIGTYPE:
- try {
- U8 expOchSigType = match.get(MatchField.EXP_OCH_SIGTYPE);
- builder.add(matchOchSignalType(lookupOchSignalType((byte) expOchSigType.getValue())));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- break;
- }
- break;
- case EXP_ODU_SIG_ID:
- OduSignalId oduSignalId = OduSignalId.oduSignalId(match.get(MatchField.EXP_ODU_SIG_ID).getTpn(),
- match.get(MatchField.EXP_ODU_SIG_ID).getTslen(),
- match.get(MatchField.EXP_ODU_SIG_ID).getTsmap());
- builder.add(matchOduSignalId(oduSignalId));
- break;
- case EXP_ODU_SIGTYPE:
- try {
- U8 oduSigType = match.get(MatchField.EXP_ODU_SIGTYPE);
- builder.add(matchOduSignalType(lookupOduSignalType((byte) oduSigType.getValue())));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- break;
- }
- break;
- case TUNNEL_ID:
- long tunnelId = match.get(MatchField.TUNNEL_ID).getValue();
- builder.matchTunnelId(tunnelId);
- break;
- case ARP_OP:
- int arpOp = match.get(MatchField.ARP_OP).getOpcode();
- builder.matchArpOp(arpOp);
- break;
- case ARP_SHA:
- mac = MacAddress.valueOf(match.get(MatchField.ARP_SHA).getLong());
- builder.matchArpSha(mac);
- break;
- case ARP_SPA:
- ip = Ip4Address.valueOf(match.get(MatchField.ARP_SPA).getInt());
- builder.matchArpSpa(ip);
- break;
- case ARP_THA:
- mac = MacAddress.valueOf(match.get(MatchField.ARP_THA).getLong());
- builder.matchArpTha(mac);
- break;
- case ARP_TPA:
- ip = Ip4Address.valueOf(match.get(MatchField.ARP_TPA).getInt());
- builder.matchArpTpa(ip);
- break;
- case MPLS_TC:
- default:
- log.warn("Match type {} not yet implemented.", field.id);
- }
- }
- return builder.build();
- }
-
- private DriverHandler getDriver(Dpid dpid) {
- DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid));
- Driver driver = driverService.getDriver(deviceId);
- DriverHandler handler = new DefaultDriverHandler(new DefaultDriverData(driver, deviceId));
- return handler;
- }
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java
deleted file mode 100644
index dcd7b0fc..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- * Copyright 2014-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.of.flow.impl;
-
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.Ip4Prefix;
-import org.onlab.packet.Ip6Address;
-import org.onlab.packet.Ip6Prefix;
-import org.onlab.packet.VlanId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.OchSignal;
-import org.onosproject.net.driver.DefaultDriverData;
-import org.onosproject.net.driver.DefaultDriverHandler;
-import org.onosproject.net.driver.Driver;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.OduSignalId;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.criteria.ArpHaCriterion;
-import org.onosproject.net.flow.criteria.ArpOpCriterion;
-import org.onosproject.net.flow.criteria.ArpPaCriterion;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onosproject.net.flow.criteria.EthCriterion;
-import org.onosproject.net.flow.criteria.EthTypeCriterion;
-import org.onosproject.net.flow.criteria.ExtensionCriterion;
-import org.onosproject.net.flow.criteria.ExtensionSelector;
-import org.onosproject.net.flow.criteria.IPCriterion;
-import org.onosproject.net.flow.criteria.IPDscpCriterion;
-import org.onosproject.net.flow.criteria.IPEcnCriterion;
-import org.onosproject.net.flow.criteria.IPProtocolCriterion;
-import org.onosproject.net.flow.criteria.IPv6ExthdrFlagsCriterion;
-import org.onosproject.net.flow.criteria.IPv6FlowLabelCriterion;
-import org.onosproject.net.flow.criteria.IPv6NDLinkLayerAddressCriterion;
-import org.onosproject.net.flow.criteria.IPv6NDTargetAddressCriterion;
-import org.onosproject.net.flow.criteria.IcmpCodeCriterion;
-import org.onosproject.net.flow.criteria.IcmpTypeCriterion;
-import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion;
-import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion;
-import org.onosproject.net.flow.criteria.MetadataCriterion;
-import org.onosproject.net.flow.criteria.MplsBosCriterion;
-import org.onosproject.net.flow.criteria.MplsCriterion;
-import org.onosproject.net.flow.criteria.OchSignalCriterion;
-import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
-import org.onosproject.net.flow.criteria.OduSignalIdCriterion;
-import org.onosproject.net.flow.criteria.OduSignalTypeCriterion;
-import org.onosproject.net.flow.criteria.PortCriterion;
-import org.onosproject.net.flow.criteria.SctpPortCriterion;
-import org.onosproject.net.flow.criteria.TcpPortCriterion;
-import org.onosproject.net.flow.criteria.TunnelIdCriterion;
-import org.onosproject.net.flow.criteria.UdpPortCriterion;
-import org.onosproject.net.flow.criteria.VlanIdCriterion;
-import org.onosproject.net.flow.criteria.VlanPcpCriterion;
-import org.onosproject.openflow.controller.ExtensionSelectorInterpreter;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFFlowAdd;
-import org.projectfloodlight.openflow.protocol.OFFlowDelete;
-import org.projectfloodlight.openflow.protocol.OFFlowMod;
-import org.projectfloodlight.openflow.protocol.match.Match;
-import org.projectfloodlight.openflow.protocol.match.MatchField;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
-import org.projectfloodlight.openflow.types.ArpOpcode;
-import org.projectfloodlight.openflow.types.CircuitSignalID;
-import org.projectfloodlight.openflow.types.EthType;
-import org.projectfloodlight.openflow.types.ICMPv4Code;
-import org.projectfloodlight.openflow.types.ICMPv4Type;
-import org.projectfloodlight.openflow.types.IPv4Address;
-import org.projectfloodlight.openflow.types.IPv6Address;
-import org.projectfloodlight.openflow.types.IPv6FlowLabel;
-import org.projectfloodlight.openflow.types.IpDscp;
-import org.projectfloodlight.openflow.types.IpEcn;
-import org.projectfloodlight.openflow.types.IpProtocol;
-import org.projectfloodlight.openflow.types.MacAddress;
-import org.projectfloodlight.openflow.types.Masked;
-import org.projectfloodlight.openflow.types.OFBooleanValue;
-import org.projectfloodlight.openflow.types.OFMetadata;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.OFVlanVidMatch;
-import org.projectfloodlight.openflow.types.TransportPort;
-import org.projectfloodlight.openflow.types.U16;
-import org.projectfloodlight.openflow.types.U32;
-import org.projectfloodlight.openflow.types.U64;
-import org.projectfloodlight.openflow.types.U8;
-import org.projectfloodlight.openflow.types.VlanPcp;
-import org.projectfloodlight.openflow.types.VlanVid;
-import org.projectfloodlight.openflow.types.OduSignalID;
-import org.slf4j.Logger;
-
-import java.util.Optional;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Builder for OpenFlow flow mods based on FlowRules.
- */
-public abstract class FlowModBuilder {
-
- private final Logger log = getLogger(getClass());
-
- private final OFFactory factory;
- private final FlowRule flowRule;
- private final TrafficSelector selector;
- protected final Long xid;
- protected final Optional<DriverService> driverService;
- protected final DeviceId deviceId;
-
- /**
- * Creates a new flow mod builder.
- *
- * @param flowRule the flow rule to transform into a flow mod
- * @param factory the OpenFlow factory to use to build the flow mod
- * @param xid the transaction ID
- * @param driverService the device driver service
- * @return the new flow mod builder
- */
- public static FlowModBuilder builder(FlowRule flowRule,
- OFFactory factory,
- Optional<Long> xid,
- Optional<DriverService> driverService) {
- switch (factory.getVersion()) {
- case OF_10:
- return new FlowModBuilderVer10(flowRule, factory, xid, driverService);
- case OF_13:
- return new FlowModBuilderVer13(flowRule, factory, xid, driverService);
- default:
- throw new UnsupportedOperationException(
- "No flow mod builder for protocol version " + factory.getVersion());
- }
- }
-
- /**
- * Constructs a flow mod builder.
- *
- * @param flowRule the flow rule to transform into a flow mod
- * @param factory the OpenFlow factory to use to build the flow mod
- * @param driverService the device driver service
- * @param xid the transaction ID
- */
- protected FlowModBuilder(FlowRule flowRule, OFFactory factory, Optional<Long> xid,
- Optional<DriverService> driverService) {
- this.factory = factory;
- this.flowRule = flowRule;
- this.selector = flowRule.selector();
- this.xid = xid.orElse(0L);
- this.driverService = driverService;
- this.deviceId = flowRule.deviceId();
- }
-
- /**
- * Builds an ADD flow mod.
- *
- * @return the flow mod
- */
- public abstract OFFlowAdd buildFlowAdd();
-
- /**
- * Builds a MODIFY flow mod.
- *
- * @return the flow mod
- */
- public abstract OFFlowMod buildFlowMod();
-
- /**
- * Builds a DELETE flow mod.
- *
- * @return the flow mod
- */
- public abstract OFFlowDelete buildFlowDel();
-
- /**
- * Builds the match for the flow mod.
- *
- * @return the match
- */
- // CHECKSTYLE IGNORE MethodLength FOR NEXT 300 LINES
- protected Match buildMatch() {
- Match.Builder mBuilder = factory.buildMatch();
- Ip6Address ip6Address;
- Ip4Prefix ip4Prefix;
- Ip6Prefix ip6Prefix;
- EthCriterion ethCriterion;
- IPCriterion ipCriterion;
- TcpPortCriterion tcpPortCriterion;
- UdpPortCriterion udpPortCriterion;
- SctpPortCriterion sctpPortCriterion;
- IPv6NDLinkLayerAddressCriterion llAddressCriterion;
- ArpHaCriterion arpHaCriterion;
- ArpPaCriterion arpPaCriterion;
-
- for (Criterion c : selector.criteria()) {
- switch (c.type()) {
- case IN_PORT:
- PortCriterion inPort = (PortCriterion) c;
- mBuilder.setExact(MatchField.IN_PORT,
- OFPort.of((int) inPort.port().toLong()));
- break;
- case IN_PHY_PORT:
- PortCriterion inPhyPort = (PortCriterion) c;
- mBuilder.setExact(MatchField.IN_PORT,
- OFPort.of((int) inPhyPort.port().toLong()));
- break;
- case METADATA:
- MetadataCriterion metadata = (MetadataCriterion) c;
- mBuilder.setExact(MatchField.METADATA,
- OFMetadata.ofRaw(metadata.metadata()));
- break;
- case ETH_DST:
- ethCriterion = (EthCriterion) c;
- mBuilder.setExact(MatchField.ETH_DST,
- MacAddress.of(ethCriterion.mac().toLong()));
- break;
- case ETH_SRC:
- ethCriterion = (EthCriterion) c;
- mBuilder.setExact(MatchField.ETH_SRC,
- MacAddress.of(ethCriterion.mac().toLong()));
- break;
- case ETH_TYPE:
- EthTypeCriterion ethType = (EthTypeCriterion) c;
- mBuilder.setExact(MatchField.ETH_TYPE, EthType.of(ethType.ethType().toShort()));
- break;
- case VLAN_VID:
- VlanIdCriterion vid = (VlanIdCriterion) c;
-
- if (vid.vlanId().equals(VlanId.ANY)) {
- mBuilder.setMasked(MatchField.VLAN_VID, OFVlanVidMatch.PRESENT,
- OFVlanVidMatch.PRESENT);
- } else if (vid.vlanId().equals(VlanId.NONE)) {
- mBuilder.setExact(MatchField.VLAN_VID, OFVlanVidMatch.NONE);
- } else {
- mBuilder.setExact(MatchField.VLAN_VID,
- OFVlanVidMatch.ofVlanVid(VlanVid.ofVlan(vid.vlanId().toShort())));
- }
- break;
- case VLAN_PCP:
- VlanPcpCriterion vpcp = (VlanPcpCriterion) c;
- mBuilder.setExact(MatchField.VLAN_PCP, VlanPcp.of(vpcp.priority()));
- break;
- case IP_DSCP:
- IPDscpCriterion ipDscpCriterion = (IPDscpCriterion) c;
- mBuilder.setExact(MatchField.IP_DSCP,
- IpDscp.of(ipDscpCriterion.ipDscp()));
- break;
- case IP_ECN:
- IPEcnCriterion ipEcnCriterion = (IPEcnCriterion) c;
- mBuilder.setExact(MatchField.IP_ECN,
- IpEcn.of(ipEcnCriterion.ipEcn()));
- break;
- case IP_PROTO:
- IPProtocolCriterion p = (IPProtocolCriterion) c;
- mBuilder.setExact(MatchField.IP_PROTO, IpProtocol.of(p.protocol()));
- break;
- case IPV4_SRC:
- ipCriterion = (IPCriterion) c;
- ip4Prefix = ipCriterion.ip().getIp4Prefix();
- if (ip4Prefix.prefixLength() != Ip4Prefix.MAX_MASK_LENGTH) {
- Ip4Address maskAddr =
- Ip4Address.makeMaskPrefix(ip4Prefix.prefixLength());
- Masked<IPv4Address> maskedIp =
- Masked.of(IPv4Address.of(ip4Prefix.address().toInt()),
- IPv4Address.of(maskAddr.toInt()));
- mBuilder.setMasked(MatchField.IPV4_SRC, maskedIp);
- } else {
- mBuilder.setExact(MatchField.IPV4_SRC,
- IPv4Address.of(ip4Prefix.address().toInt()));
- }
- break;
- case IPV4_DST:
- ipCriterion = (IPCriterion) c;
- ip4Prefix = ipCriterion.ip().getIp4Prefix();
- if (ip4Prefix.prefixLength() != Ip4Prefix.MAX_MASK_LENGTH) {
- Ip4Address maskAddr =
- Ip4Address.makeMaskPrefix(ip4Prefix.prefixLength());
- Masked<IPv4Address> maskedIp =
- Masked.of(IPv4Address.of(ip4Prefix.address().toInt()),
- IPv4Address.of(maskAddr.toInt()));
- mBuilder.setMasked(MatchField.IPV4_DST, maskedIp);
- } else {
- mBuilder.setExact(MatchField.IPV4_DST,
- IPv4Address.of(ip4Prefix.address().toInt()));
- }
- break;
- case TCP_SRC:
- tcpPortCriterion = (TcpPortCriterion) c;
- mBuilder.setExact(MatchField.TCP_SRC,
- TransportPort.of(tcpPortCriterion.tcpPort().toInt()));
- break;
- case TCP_DST:
- tcpPortCriterion = (TcpPortCriterion) c;
- mBuilder.setExact(MatchField.TCP_DST,
- TransportPort.of(tcpPortCriterion.tcpPort().toInt()));
- break;
- case UDP_SRC:
- udpPortCriterion = (UdpPortCriterion) c;
- mBuilder.setExact(MatchField.UDP_SRC,
- TransportPort.of(udpPortCriterion.udpPort().toInt()));
- break;
- case UDP_DST:
- udpPortCriterion = (UdpPortCriterion) c;
- mBuilder.setExact(MatchField.UDP_DST,
- TransportPort.of(udpPortCriterion.udpPort().toInt()));
- break;
- case SCTP_SRC:
- sctpPortCriterion = (SctpPortCriterion) c;
- mBuilder.setExact(MatchField.SCTP_SRC,
- TransportPort.of(sctpPortCriterion.sctpPort().toInt()));
- break;
- case SCTP_DST:
- sctpPortCriterion = (SctpPortCriterion) c;
- mBuilder.setExact(MatchField.SCTP_DST,
- TransportPort.of(sctpPortCriterion.sctpPort().toInt()));
- break;
- case ICMPV4_TYPE:
- IcmpTypeCriterion icmpType = (IcmpTypeCriterion) c;
- mBuilder.setExact(MatchField.ICMPV4_TYPE,
- ICMPv4Type.of(icmpType.icmpType()));
- break;
- case ICMPV4_CODE:
- IcmpCodeCriterion icmpCode = (IcmpCodeCriterion) c;
- mBuilder.setExact(MatchField.ICMPV4_CODE,
- ICMPv4Code.of(icmpCode.icmpCode()));
- break;
- case IPV6_SRC:
- ipCriterion = (IPCriterion) c;
- ip6Prefix = ipCriterion.ip().getIp6Prefix();
- if (ip6Prefix.prefixLength() != Ip6Prefix.MAX_MASK_LENGTH) {
- Ip6Address maskAddr =
- Ip6Address.makeMaskPrefix(ip6Prefix.prefixLength());
- Masked<IPv6Address> maskedIp =
- Masked.of(IPv6Address.of(ip6Prefix.address().toString()),
- IPv6Address.of(maskAddr.toString()));
- mBuilder.setMasked(MatchField.IPV6_SRC, maskedIp);
- } else {
- mBuilder.setExact(MatchField.IPV6_SRC,
- IPv6Address.of(ip6Prefix.address().toString()));
- }
- break;
- case IPV6_DST:
- ipCriterion = (IPCriterion) c;
- ip6Prefix = ipCriterion.ip().getIp6Prefix();
- if (ip6Prefix.prefixLength() != Ip6Prefix.MAX_MASK_LENGTH) {
- Ip6Address maskAddr =
- Ip6Address.makeMaskPrefix(ip6Prefix.prefixLength());
- Masked<IPv6Address> maskedIp =
- Masked.of(IPv6Address.of(ip6Prefix.address().toString()),
- IPv6Address.of(maskAddr.toString()));
- mBuilder.setMasked(MatchField.IPV6_DST, maskedIp);
- } else {
- mBuilder.setExact(MatchField.IPV6_DST,
- IPv6Address.of(ip6Prefix.address().toString()));
- }
- break;
- case IPV6_FLABEL:
- IPv6FlowLabelCriterion flowLabelCriterion =
- (IPv6FlowLabelCriterion) c;
- mBuilder.setExact(MatchField.IPV6_FLABEL,
- IPv6FlowLabel.of(flowLabelCriterion.flowLabel()));
- break;
- case ICMPV6_TYPE:
- Icmpv6TypeCriterion icmpv6Type = (Icmpv6TypeCriterion) c;
- mBuilder.setExact(MatchField.ICMPV6_TYPE,
- U8.of(icmpv6Type.icmpv6Type()));
- break;
- case ICMPV6_CODE:
- Icmpv6CodeCriterion icmpv6Code = (Icmpv6CodeCriterion) c;
- mBuilder.setExact(MatchField.ICMPV6_CODE,
- U8.of(icmpv6Code.icmpv6Code()));
- break;
- case IPV6_ND_TARGET:
- IPv6NDTargetAddressCriterion targetAddressCriterion =
- (IPv6NDTargetAddressCriterion) c;
- ip6Address = targetAddressCriterion.targetAddress();
- mBuilder.setExact(MatchField.IPV6_ND_TARGET,
- IPv6Address.of(ip6Address.toOctets()));
- break;
- case IPV6_ND_SLL:
- llAddressCriterion =
- (IPv6NDLinkLayerAddressCriterion) c;
- mBuilder.setExact(MatchField.IPV6_ND_SLL,
- MacAddress.of(llAddressCriterion.mac().toLong()));
- break;
- case IPV6_ND_TLL:
- llAddressCriterion =
- (IPv6NDLinkLayerAddressCriterion) c;
- mBuilder.setExact(MatchField.IPV6_ND_TLL,
- MacAddress.of(llAddressCriterion.mac().toLong()));
- break;
- case MPLS_LABEL:
- MplsCriterion mp = (MplsCriterion) c;
- mBuilder.setExact(MatchField.MPLS_LABEL, U32.of(mp.label().toInt()));
- break;
- case IPV6_EXTHDR:
- IPv6ExthdrFlagsCriterion exthdrFlagsCriterion =
- (IPv6ExthdrFlagsCriterion) c;
- mBuilder.setExact(MatchField.IPV6_EXTHDR,
- U16.of(exthdrFlagsCriterion.exthdrFlags()));
- break;
- case OCH_SIGID:
- try {
- OchSignalCriterion ochSignalCriterion = (OchSignalCriterion) c;
- OchSignal signal = ochSignalCriterion.lambda();
- byte gridType = OpenFlowValueMapper.lookupGridType(signal.gridType());
- byte channelSpacing = OpenFlowValueMapper.lookupChannelSpacing(signal.channelSpacing());
- mBuilder.setExact(MatchField.EXP_OCH_SIG_ID,
- new CircuitSignalID(gridType, channelSpacing,
- (short) signal.spacingMultiplier(), (short) signal.slotGranularity()));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- }
- break;
- case OCH_SIGTYPE:
- try {
- OchSignalTypeCriterion sc = (OchSignalTypeCriterion) c;
- byte signalType = OpenFlowValueMapper.lookupOchSignalType(sc.signalType());
- mBuilder.setExact(MatchField.EXP_OCH_SIGTYPE, U8.of(signalType));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- }
- break;
- case ODU_SIGID:
- OduSignalIdCriterion oduSignalIdCriterion = (OduSignalIdCriterion) c;
- OduSignalId oduSignalId = oduSignalIdCriterion.oduSignalId();
- mBuilder.setExact(MatchField.EXP_ODU_SIG_ID,
- new OduSignalID((short) oduSignalId.tributaryPortNumber(),
- (short) oduSignalId.tributarySlotLength(),
- oduSignalId.tributarySlotBitmap()));
- break;
- case ODU_SIGTYPE:
- try {
- OduSignalTypeCriterion oduSignalTypeCriterion = (OduSignalTypeCriterion) c;
- byte oduSigType = OpenFlowValueMapper.lookupOduSignalType(oduSignalTypeCriterion.signalType());
- mBuilder.setExact(MatchField.EXP_ODU_SIGTYPE, U8.of(oduSigType));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- }
- break;
- case TUNNEL_ID:
- TunnelIdCriterion tunnelId = (TunnelIdCriterion) c;
- mBuilder.setExact(MatchField.TUNNEL_ID,
- U64.of(tunnelId.tunnelId()));
- break;
- case MPLS_BOS:
- MplsBosCriterion mplsBos = (MplsBosCriterion) c;
- mBuilder.setExact(MatchField.MPLS_BOS,
- mplsBos.mplsBos() ? OFBooleanValue.TRUE
- : OFBooleanValue.FALSE);
- break;
- case ARP_OP:
- ArpOpCriterion arpOp = (ArpOpCriterion) c;
- mBuilder.setExact(MatchField.ARP_OP,
- ArpOpcode.of(arpOp.arpOp()));
- break;
- case ARP_SHA:
- arpHaCriterion = (ArpHaCriterion) c;
- mBuilder.setExact(MatchField.ARP_SHA,
- MacAddress.of(arpHaCriterion.mac().toLong()));
- break;
- case ARP_SPA:
- arpPaCriterion = (ArpPaCriterion) c;
- mBuilder.setExact(MatchField.ARP_SPA,
- IPv4Address.of(arpPaCriterion.ip().toInt()));
- break;
- case ARP_THA:
- arpHaCriterion = (ArpHaCriterion) c;
- mBuilder.setExact(MatchField.ARP_THA,
- MacAddress.of(arpHaCriterion.mac().toLong()));
- break;
- case ARP_TPA:
- arpPaCriterion = (ArpPaCriterion) c;
- mBuilder.setExact(MatchField.ARP_TPA,
- IPv4Address.of(arpPaCriterion.ip().toInt()));
- break;
- case EXTENSION:
- ExtensionCriterion extensionCriterion = (ExtensionCriterion) c;
- OFOxm oxm = buildExtensionOxm(extensionCriterion.extensionSelector());
- if (oxm == null) {
- log.warn("Unable to build extension selector");
- break;
- }
-
- if (oxm.isMasked()) {
- mBuilder.setMasked(oxm.getMatchField(), oxm.getValue(), oxm.getMask());
- } else {
- mBuilder.setExact(oxm.getMatchField(), oxm.getValue());
- }
-
- break;
- case MPLS_TC:
- case PBB_ISID:
- // TODO: need to implement PBB-ISID case when OpenFlowJ is ready
- default:
- log.warn("Match type {} not yet implemented.", c.type());
- }
- }
- return mBuilder.build();
- }
-
- /**
- * Returns the flow rule for this builder.
- *
- * @return the flow rule
- */
- protected FlowRule flowRule() {
- return flowRule;
- }
-
- /**
- * Returns the factory used for building OpenFlow constructs.
- *
- * @return the factory
- */
- protected OFFactory factory() {
- return factory;
- }
-
- private OFOxm buildExtensionOxm(ExtensionSelector extension) {
- if (!driverService.isPresent()) {
- log.error("No driver service present");
- return null;
- }
- Driver driver = driverService.get().getDriver(deviceId);
- if (driver.hasBehaviour(ExtensionSelectorInterpreter.class)) {
- DefaultDriverHandler handler =
- new DefaultDriverHandler(new DefaultDriverData(driver, deviceId));
- ExtensionSelectorInterpreter interpreter = handler.behaviour(ExtensionSelectorInterpreter.class);
-
- return interpreter.mapSelector(factory(), extension);
- }
-
- return null;
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
deleted file mode 100644
index d4ebb4fd..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright 2014-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.of.flow.impl;
-
-import org.onlab.packet.Ip4Address;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.flow.instructions.Instructions.SetQueueInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanPcpInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFFlowAdd;
-import org.projectfloodlight.openflow.protocol.OFFlowDelete;
-import org.projectfloodlight.openflow.protocol.OFFlowMod;
-import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
-import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
-import org.projectfloodlight.openflow.protocol.action.OFActionEnqueue;
-import org.projectfloodlight.openflow.protocol.match.Match;
-import org.projectfloodlight.openflow.types.IPv4Address;
-import org.projectfloodlight.openflow.types.MacAddress;
-import org.projectfloodlight.openflow.types.OFBufferId;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.U64;
-import org.projectfloodlight.openflow.types.VlanPcp;
-import org.projectfloodlight.openflow.types.VlanVid;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * Flow mod builder for OpenFlow 1.0.
- */
-public class FlowModBuilderVer10 extends FlowModBuilder {
-
- private final Logger log = LoggerFactory.getLogger(getClass());
- private static final int OFPCML_NO_BUFFER = 0xffff;
-
- private final TrafficTreatment treatment;
-
- /**
- * Constructor for a flow mod builder for OpenFlow 1.0.
- *
- * @param flowRule the flow rule to transform into a flow mod
- * @param factory the OpenFlow factory to use to build the flow mod
- * @param xid the transaction ID
- * @param driverService the device driver service
- */
- protected FlowModBuilderVer10(FlowRule flowRule,
- OFFactory factory, Optional<Long> xid,
- Optional<DriverService> driverService) {
- super(flowRule, factory, xid, driverService);
-
- this.treatment = flowRule.treatment();
- }
-
- @Override
- public OFFlowAdd buildFlowAdd() {
- Match match = buildMatch();
- List<OFAction> actions = buildActions();
-
- long cookie = flowRule().id().value();
-
-
- OFFlowAdd fm = factory().buildFlowAdd()
- .setXid(xid)
- .setCookie(U64.of(cookie))
- .setBufferId(OFBufferId.NO_BUFFER)
- .setActions(actions)
- .setMatch(match)
- .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
- .setPriority(flowRule().priority())
- .build();
-
- return fm;
- }
-
- @Override
- public OFFlowMod buildFlowMod() {
- Match match = buildMatch();
- List<OFAction> actions = buildActions();
-
- long cookie = flowRule().id().value();
-
- OFFlowMod fm = factory().buildFlowModify()
- .setXid(xid)
- .setCookie(U64.of(cookie))
- .setBufferId(OFBufferId.NO_BUFFER)
- .setActions(actions)
- .setMatch(match)
- .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
- .setPriority(flowRule().priority())
- .build();
-
- return fm;
- }
-
- @Override
- public OFFlowDelete buildFlowDel() {
- Match match = buildMatch();
-
- long cookie = flowRule().id().value();
-
- OFFlowDelete fm = factory().buildFlowDelete()
- .setXid(xid)
- .setCookie(U64.of(cookie))
- .setBufferId(OFBufferId.NO_BUFFER)
- .setMatch(match)
- .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
- .setPriority(flowRule().priority())
- .build();
-
- return fm;
- }
-
- private List<OFAction> buildActions() {
- List<OFAction> acts = new LinkedList<>();
- OFAction act;
- if (treatment == null) {
- return acts;
- }
- for (Instruction i : treatment.immediate()) {
- switch (i.type()) {
- case DROP:
- case NOACTION:
- return Collections.emptyList();
- case L2MODIFICATION:
- act = buildL2Modification(i);
- if (act != null) {
- acts.add(buildL2Modification(i));
- }
- break;
- case L3MODIFICATION:
- act = buildL3Modification(i);
- if (act != null) {
- acts.add(buildL3Modification(i));
- }
- break;
- case OUTPUT:
- OutputInstruction out = (OutputInstruction) i;
- OFActionOutput.Builder action = factory().actions().buildOutput()
- .setPort(OFPort.of((int) out.port().toLong()));
- if (out.port().equals(PortNumber.CONTROLLER)) {
- action.setMaxLen(OFPCML_NO_BUFFER);
- }
- acts.add(action.build());
- break;
- case QUEUE:
- SetQueueInstruction queue = (SetQueueInstruction) i;
- if (queue.port() == null) {
- log.warn("Required argument 'port' undefined for OFActionEnqueue");
- }
- OFActionEnqueue.Builder queueBuilder = factory().actions().buildEnqueue()
- .setQueueId(queue.queueId())
- .setPort(OFPort.ofInt((int) queue.port().toLong()));
- acts.add(queueBuilder.build());
- break;
- case L0MODIFICATION:
- case L1MODIFICATION:
- case GROUP:
- case TABLE:
- case METADATA:
- log.warn("Instruction type {} not supported with protocol version {}",
- i.type(), factory().getVersion());
- break;
- default:
- log.warn("Instruction type {} not yet implemented.", i.type());
- }
- }
-
- return acts;
- }
-
- private OFAction buildL3Modification(Instruction i) {
- L3ModificationInstruction l3m = (L3ModificationInstruction) i;
- ModIPInstruction ip;
- Ip4Address ip4;
- switch (l3m.subtype()) {
- case IPV4_SRC:
- ip = (ModIPInstruction) i;
- ip4 = ip.ip().getIp4Address();
- return factory().actions().setNwSrc(IPv4Address.of(ip4.toInt()));
- case IPV4_DST:
- ip = (ModIPInstruction) i;
- ip4 = ip.ip().getIp4Address();
- return factory().actions().setNwDst(IPv4Address.of(ip4.toInt()));
- default:
- log.warn("Unimplemented action type {}.", l3m.subtype());
- break;
- }
- return null;
- }
-
- private OFAction buildL2Modification(Instruction i) {
- L2ModificationInstruction l2m = (L2ModificationInstruction) i;
- ModEtherInstruction eth;
- switch (l2m.subtype()) {
- case ETH_DST:
- eth = (ModEtherInstruction) l2m;
- return factory().actions().setDlDst(MacAddress.of(eth.mac().toLong()));
- case ETH_SRC:
- eth = (ModEtherInstruction) l2m;
- return factory().actions().setDlSrc(MacAddress.of(eth.mac().toLong()));
- case VLAN_ID:
- ModVlanIdInstruction vlanId = (ModVlanIdInstruction) l2m;
- return factory().actions().setVlanVid(VlanVid.ofVlan(vlanId.vlanId().toShort()));
- case VLAN_PCP:
- ModVlanPcpInstruction vlanPcp = (ModVlanPcpInstruction) l2m;
- return factory().actions().setVlanPcp(VlanPcp.of(vlanPcp.vlanPcp()));
- case VLAN_POP:
- return factory().actions().stripVlan();
- case VLAN_PUSH:
- return null;
- default:
- log.warn("Unimplemented action type {}.", l2m.subtype());
- break;
- }
- return null;
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
deleted file mode 100644
index a3182e72..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * Copyright 2014-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.of.flow.impl;
-
-import com.google.common.collect.Lists;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.Ip6Address;
-import org.onosproject.net.OchSignal;
-import org.onosproject.net.OduSignalId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.driver.DefaultDriverData;
-import org.onosproject.net.driver.DefaultDriverHandler;
-import org.onosproject.net.driver.Driver;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.ExtensionTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.flow.instructions.Instructions.GroupInstruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.flow.instructions.Instructions.SetQueueInstruction;
-import org.onosproject.net.flow.instructions.L0ModificationInstruction;
-import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
-import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction;
-import org.onosproject.net.flow.instructions.L1ModificationInstruction;
-import org.onosproject.net.flow.instructions.L1ModificationInstruction.ModOduSignalIdInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsBosInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsLabelInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModTunnelIdInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanPcpInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeaderInstructions;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpIPInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpEthInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpOpInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
-import org.onosproject.net.flow.instructions.L4ModificationInstruction;
-import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction;
-import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFFlowAdd;
-import org.projectfloodlight.openflow.protocol.OFFlowDelete;
-import org.projectfloodlight.openflow.protocol.OFFlowMod;
-import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
-import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
-import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetQueue;
-import org.projectfloodlight.openflow.protocol.instruction.OFInstruction;
-import org.projectfloodlight.openflow.protocol.match.Match;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
-import org.projectfloodlight.openflow.types.ArpOpcode;
-import org.projectfloodlight.openflow.types.CircuitSignalID;
-import org.projectfloodlight.openflow.types.EthType;
-import org.projectfloodlight.openflow.types.IPv4Address;
-import org.projectfloodlight.openflow.types.IPv6Address;
-import org.projectfloodlight.openflow.types.IPv6FlowLabel;
-import org.projectfloodlight.openflow.types.MacAddress;
-import org.projectfloodlight.openflow.types.OFBooleanValue;
-import org.projectfloodlight.openflow.types.OFBufferId;
-import org.projectfloodlight.openflow.types.OFGroup;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.OFVlanVidMatch;
-import org.projectfloodlight.openflow.types.OduSignalID;
-import org.projectfloodlight.openflow.types.TableId;
-import org.projectfloodlight.openflow.types.TransportPort;
-import org.projectfloodlight.openflow.types.U32;
-import org.projectfloodlight.openflow.types.U64;
-import org.projectfloodlight.openflow.types.VlanPcp;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * Flow mod builder for OpenFlow 1.3+.
- */
-public class FlowModBuilderVer13 extends FlowModBuilder {
-
- private final Logger log = LoggerFactory.getLogger(getClass());
- private static final int OFPCML_NO_BUFFER = 0xffff;
-
- private final TrafficTreatment treatment;
-
- /**
- * Constructor for a flow mod builder for OpenFlow 1.3.
- *
- * @param flowRule the flow rule to transform into a flow mod
- * @param factory the OpenFlow factory to use to build the flow mod
- * @param xid the transaction ID
- * @param driverService the device driver service
- */
- protected FlowModBuilderVer13(FlowRule flowRule, OFFactory factory, Optional<Long> xid,
- Optional<DriverService> driverService) {
- super(flowRule, factory, xid, driverService);
-
- this.treatment = flowRule.treatment();
- }
-
- @Override
- public OFFlowAdd buildFlowAdd() {
- Match match = buildMatch();
- List<OFAction> deferredActions = buildActions(treatment.deferred());
- List<OFAction> immediateActions = buildActions(treatment.immediate());
- List<OFInstruction> instructions = Lists.newLinkedList();
-
-
- if (treatment.clearedDeferred()) {
- instructions.add(factory().instructions().clearActions());
- }
- if (immediateActions.size() > 0) {
- instructions.add(factory().instructions().applyActions(immediateActions));
- }
- if (deferredActions.size() > 0) {
- instructions.add(factory().instructions().writeActions(deferredActions));
- }
- if (treatment.tableTransition() != null) {
- instructions.add(buildTableGoto(treatment.tableTransition()));
- }
- if (treatment.writeMetadata() != null) {
- instructions.add(buildMetadata(treatment.writeMetadata()));
- }
- if (treatment.metered() != null) {
- instructions.add(buildMeter(treatment.metered()));
- }
-
- long cookie = flowRule().id().value();
-
- OFFlowAdd fm = factory().buildFlowAdd()
- .setXid(xid)
- .setCookie(U64.of(cookie))
- .setBufferId(OFBufferId.NO_BUFFER)
- .setInstructions(instructions)
- .setMatch(match)
- .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
- .setPriority(flowRule().priority())
- .setTableId(TableId.of(flowRule().tableId()))
- .build();
-
- return fm;
- }
-
- @Override
- public OFFlowMod buildFlowMod() {
- Match match = buildMatch();
- List<OFAction> deferredActions = buildActions(treatment.deferred());
- List<OFAction> immediateActions = buildActions(treatment.immediate());
- List<OFInstruction> instructions = Lists.newLinkedList();
-
-
- if (immediateActions.size() > 0) {
- instructions.add(factory().instructions().applyActions(immediateActions));
- }
- if (treatment.clearedDeferred()) {
- instructions.add(factory().instructions().clearActions());
- }
- if (deferredActions.size() > 0) {
- instructions.add(factory().instructions().writeActions(deferredActions));
- }
- if (treatment.tableTransition() != null) {
- instructions.add(buildTableGoto(treatment.tableTransition()));
- }
- if (treatment.writeMetadata() != null) {
- instructions.add(buildMetadata(treatment.writeMetadata()));
- }
- if (treatment.metered() != null) {
- instructions.add(buildMeter(treatment.metered()));
- }
-
- long cookie = flowRule().id().value();
-
- OFFlowMod fm = factory().buildFlowModify()
- .setXid(xid)
- .setCookie(U64.of(cookie))
- .setBufferId(OFBufferId.NO_BUFFER)
- .setInstructions(instructions)
- .setMatch(match)
- .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
- .setPriority(flowRule().priority())
- .setTableId(TableId.of(flowRule().tableId()))
- .build();
-
- return fm;
- }
-
- @Override
- public OFFlowDelete buildFlowDel() {
- Match match = buildMatch();
-
- long cookie = flowRule().id().value();
-
- OFFlowDelete fm = factory().buildFlowDelete()
- .setXid(xid)
- .setCookie(U64.of(cookie))
- .setBufferId(OFBufferId.NO_BUFFER)
- .setMatch(match)
- .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
- .setPriority(flowRule().priority())
- .setTableId(TableId.of(flowRule().tableId()))
- .build();
-
- return fm;
- }
-
- private List<OFAction> buildActions(List<Instruction> treatments) {
- if (treatment == null) {
- return Collections.emptyList();
- }
-
- boolean tableFound = false;
- List<OFAction> actions = new LinkedList<>();
- for (Instruction i : treatments) {
- switch (i.type()) {
- case DROP:
- case NOACTION:
- return Collections.emptyList();
- case L0MODIFICATION:
- actions.add(buildL0Modification(i));
- break;
- case L1MODIFICATION:
- actions.add(buildL1Modification(i));
- break;
- case L2MODIFICATION:
- actions.add(buildL2Modification(i));
- break;
- case L3MODIFICATION:
- actions.add(buildL3Modification(i));
- break;
- case L4MODIFICATION:
- actions.add(buildL4Modification(i));
- break;
- case OUTPUT:
- OutputInstruction out = (OutputInstruction) i;
- OFActionOutput.Builder action = factory().actions().buildOutput()
- .setPort(OFPort.of((int) out.port().toLong()));
- if (out.port().equals(PortNumber.CONTROLLER)) {
- action.setMaxLen(OFPCML_NO_BUFFER);
- }
- actions.add(action.build());
- break;
- case GROUP:
- GroupInstruction group = (GroupInstruction) i;
- OFActionGroup.Builder groupBuilder = factory().actions().buildGroup()
- .setGroup(OFGroup.of(group.groupId().id()));
- actions.add(groupBuilder.build());
- break;
- case QUEUE:
- SetQueueInstruction queue = (SetQueueInstruction) i;
- OFActionSetQueue.Builder queueBuilder = factory().actions().buildSetQueue()
- .setQueueId(queue.queueId());
- actions.add(queueBuilder.build());
- break;
- case TABLE:
- //FIXME: should not occur here.
- tableFound = true;
- break;
- case EXTENSION:
- actions.add(buildExtensionAction(((Instructions.ExtensionInstructionWrapper) i)
- .extensionInstruction()));
- break;
- default:
- log.warn("Instruction type {} not yet implemented.", i.type());
- }
- }
- if (tableFound && actions.isEmpty()) {
- // handles the case where there are no actions, but there is
- // a goto instruction for the next table
- return Collections.emptyList();
- }
- return actions;
- }
-
- private OFInstruction buildTableGoto(Instructions.TableTypeTransition i) {
- OFInstruction instruction = factory().instructions().gotoTable(
- TableId.of(i.tableId()));
- return instruction;
- }
-
- private OFInstruction buildMetadata(Instructions.MetadataInstruction m) {
- OFInstruction instruction = factory().instructions().writeMetadata(
- U64.of(m.metadata()), U64.of(m.metadataMask()));
- return instruction;
- }
-
- private OFInstruction buildMeter(Instructions.MeterInstruction metered) {
- return factory().instructions().meter(metered.meterId().id());
- }
-
-
- private OFAction buildL0Modification(Instruction i) {
- L0ModificationInstruction l0m = (L0ModificationInstruction) i;
- OFOxm<?> oxm = null;
- switch (l0m.subtype()) {
- case LAMBDA:
- return buildModLambdaInstruction((ModLambdaInstruction) i);
- case OCH:
- try {
- ModOchSignalInstruction modOchSignalInstruction = (ModOchSignalInstruction) l0m;
- OchSignal signal = modOchSignalInstruction.lambda();
- byte gridType = OpenFlowValueMapper.lookupGridType(signal.gridType());
- byte channelSpacing = OpenFlowValueMapper.lookupChannelSpacing(signal.channelSpacing());
- oxm = factory().oxms().expOchSigId(
- new CircuitSignalID(gridType, channelSpacing,
- (short) signal.spacingMultiplier(), (short) signal.slotGranularity()));
- } catch (NoMappingFoundException e) {
- log.warn(e.getMessage());
- break;
- }
- break;
- default:
- log.warn("Unimplemented action type {}.", l0m.subtype());
- break;
- }
- if (oxm != null) {
- return factory().actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFAction buildModLambdaInstruction(ModLambdaInstruction instruction) {
- return factory().actions().circuit(factory().oxms().expOchSigId(
- new CircuitSignalID((byte) 1, (byte) 2, instruction.lambda(), (short) 1)));
- }
-
- private OFAction buildModOchSignalInstruction(ModOchSignalInstruction instruction) {
- OchSignal signal = instruction.lambda();
- byte gridType = OpenFlowValueMapper.lookupGridType(signal.gridType());
- byte channelSpacing = OpenFlowValueMapper.lookupChannelSpacing(signal.channelSpacing());
-
- return factory().actions().circuit(factory().oxms().expOchSigId(
- new CircuitSignalID(gridType, channelSpacing,
- (short) signal.spacingMultiplier(), (short) signal.slotGranularity())
- ));
- }
-
- private OFAction buildL1Modification(Instruction i) {
- L1ModificationInstruction l1m = (L1ModificationInstruction) i;
- OFOxm<?> oxm = null;
- switch (l1m.subtype()) {
- case ODU_SIGID:
- ModOduSignalIdInstruction modOduSignalIdInstruction = (ModOduSignalIdInstruction) l1m;
- OduSignalId oduSignalId = modOduSignalIdInstruction.oduSignalId();
-
- OduSignalID oduSignalID = new OduSignalID((short) oduSignalId.tributaryPortNumber(),
- (short) oduSignalId.tributarySlotLength(),
- oduSignalId.tributarySlotBitmap());
-
- oxm = factory().oxms().expOduSigId(oduSignalID);
- break;
- default:
- log.warn("Unimplemented action type {}.", l1m.subtype());
- break;
- }
-
- if (oxm != null) {
- return factory().actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFAction buildL2Modification(Instruction i) {
- L2ModificationInstruction l2m = (L2ModificationInstruction) i;
- ModEtherInstruction eth;
- OFOxm<?> oxm = null;
- switch (l2m.subtype()) {
- case ETH_DST:
- eth = (ModEtherInstruction) l2m;
- oxm = factory().oxms().ethDst(MacAddress.of(eth.mac().toLong()));
- break;
- case ETH_SRC:
- eth = (ModEtherInstruction) l2m;
- oxm = factory().oxms().ethSrc(MacAddress.of(eth.mac().toLong()));
- break;
- case VLAN_ID:
- ModVlanIdInstruction vlanId = (ModVlanIdInstruction) l2m;
- oxm = factory().oxms().vlanVid(OFVlanVidMatch.ofVlan(vlanId.vlanId().toShort()));
- break;
- case VLAN_PCP:
- ModVlanPcpInstruction vlanPcp = (ModVlanPcpInstruction) l2m;
- oxm = factory().oxms().vlanPcp(VlanPcp.of(vlanPcp.vlanPcp()));
- break;
- case MPLS_PUSH:
- PushHeaderInstructions pushHeaderInstructions =
- (PushHeaderInstructions) l2m;
- return factory().actions().pushMpls(EthType.of(pushHeaderInstructions
- .ethernetType().toShort()));
- case MPLS_POP:
- PushHeaderInstructions popHeaderInstructions =
- (PushHeaderInstructions) l2m;
- return factory().actions().popMpls(EthType.of(popHeaderInstructions
- .ethernetType().toShort()));
- case MPLS_LABEL:
- ModMplsLabelInstruction mplsLabel =
- (ModMplsLabelInstruction) l2m;
- oxm = factory().oxms().mplsLabel(U32.of(mplsLabel.mplsLabel().toInt()));
- break;
- case MPLS_BOS:
- ModMplsBosInstruction mplsBos = (ModMplsBosInstruction) l2m;
- oxm = factory().oxms()
- .mplsBos(mplsBos.mplsBos() ? OFBooleanValue.TRUE
- : OFBooleanValue.FALSE);
- break;
- case DEC_MPLS_TTL:
- return factory().actions().decMplsTtl();
- case VLAN_POP:
- return factory().actions().popVlan();
- case VLAN_PUSH:
- PushHeaderInstructions pushVlanInstruction = (PushHeaderInstructions) l2m;
- return factory().actions().pushVlan(
- EthType.of(pushVlanInstruction.ethernetType().toShort()));
- case TUNNEL_ID:
- ModTunnelIdInstruction tunnelId = (ModTunnelIdInstruction) l2m;
- oxm = factory().oxms().tunnelId(U64.of(tunnelId.tunnelId()));
- break;
- default:
- log.warn("Unimplemented action type {}.", l2m.subtype());
- break;
- }
-
- if (oxm != null) {
- return factory().actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFAction buildL3Modification(Instruction i) {
- L3ModificationInstruction l3m = (L3ModificationInstruction) i;
- ModIPInstruction ip;
- Ip4Address ip4;
- Ip6Address ip6;
- OFOxm<?> oxm = null;
- switch (l3m.subtype()) {
- case IPV4_SRC:
- ip = (ModIPInstruction) i;
- ip4 = ip.ip().getIp4Address();
- oxm = factory().oxms().ipv4Src(IPv4Address.of(ip4.toInt()));
- break;
- case IPV4_DST:
- ip = (ModIPInstruction) i;
- ip4 = ip.ip().getIp4Address();
- oxm = factory().oxms().ipv4Dst(IPv4Address.of(ip4.toInt()));
- break;
- case IPV6_SRC:
- ip = (ModIPInstruction) i;
- ip6 = ip.ip().getIp6Address();
- oxm = factory().oxms().ipv6Src(IPv6Address.of(ip6.toOctets()));
- break;
- case IPV6_DST:
- ip = (ModIPInstruction) i;
- ip6 = ip.ip().getIp6Address();
- oxm = factory().oxms().ipv6Dst(IPv6Address.of(ip6.toOctets()));
- break;
- case IPV6_FLABEL:
- ModIPv6FlowLabelInstruction flowLabelInstruction =
- (ModIPv6FlowLabelInstruction) i;
- int flowLabel = flowLabelInstruction.flowLabel();
- oxm = factory().oxms().ipv6Flabel(IPv6FlowLabel.of(flowLabel));
- break;
- case ARP_SPA:
- ModArpIPInstruction aip = (ModArpIPInstruction) i;
- ip4 = aip.ip().getIp4Address();
- oxm = factory().oxms().arpSpa(IPv4Address.of(ip4.toInt()));
- break;
- case ARP_SHA:
- ModArpEthInstruction ei = (ModArpEthInstruction) i;
- oxm = factory().oxms().arpSha(MacAddress.of(ei.mac().toLong()));
- break;
- case ARP_OP:
- ModArpOpInstruction oi = (ModArpOpInstruction) i;
- oxm = factory().oxms().arpOp(ArpOpcode.of((int) oi.op()));
- break;
- case DEC_TTL:
- return factory().actions().decNwTtl();
- case TTL_IN:
- return factory().actions().copyTtlIn();
- case TTL_OUT:
- return factory().actions().copyTtlOut();
- default:
- log.warn("Unimplemented action type {}.", l3m.subtype());
- break;
- }
-
- if (oxm != null) {
- return factory().actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFAction buildL4Modification(Instruction i) {
- L4ModificationInstruction l4m = (L4ModificationInstruction) i;
- ModTransportPortInstruction tp;
- OFOxm<?> oxm = null;
- switch (l4m.subtype()) {
- case TCP_SRC:
- tp = (ModTransportPortInstruction) l4m;
- oxm = factory().oxms().tcpSrc(TransportPort.of(tp.port().toInt()));
- break;
- case TCP_DST:
- tp = (ModTransportPortInstruction) l4m;
- oxm = factory().oxms().tcpDst(TransportPort.of(tp.port().toInt()));
- break;
- case UDP_SRC:
- tp = (ModTransportPortInstruction) l4m;
- oxm = factory().oxms().udpSrc(TransportPort.of(tp.port().toInt()));
- break;
- case UDP_DST:
- tp = (ModTransportPortInstruction) l4m;
- oxm = factory().oxms().udpDst(TransportPort.of(tp.port().toInt()));
- break;
- default:
- log.warn("Unimplemented action type {}.", l4m.subtype());
- break;
- }
-
- if (oxm != null) {
- return factory().actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFAction buildExtensionAction(ExtensionTreatment i) {
- if (!driverService.isPresent()) {
- log.error("No driver service present");
- return null;
- }
- Driver driver = driverService.get().getDriver(deviceId);
- if (driver.hasBehaviour(ExtensionTreatmentInterpreter.class)) {
- DefaultDriverHandler handler =
- new DefaultDriverHandler(new DefaultDriverData(driver, deviceId));
- ExtensionTreatmentInterpreter interpreter = handler.behaviour(ExtensionTreatmentInterpreter.class);
- return interpreter.mapInstruction(factory(), i);
- }
-
- return null;
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java
deleted file mode 100644
index c4c81afa..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java
+++ /dev/null
@@ -1,100 +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.provider.of.flow.impl;
-
-import org.onlab.util.SharedExecutors;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFFlowStatsRequest;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.TableId;
-import org.slf4j.Logger;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Collects flow statistics for the specified switch.
- */
-class FlowStatsCollector {
-
- private final Logger log = getLogger(getClass());
-
- public static final int SECONDS = 1000;
-
- private final OpenFlowSwitch sw;
- private Timer timer;
- private TimerTask task;
-
- private int pollInterval;
-
- /**
- * Creates a new collector for the given switch and poll frequency.
- *
- * @param timer timer to use for scheduling
- * @param sw switch to pull
- * @param pollInterval poll frequency in seconds
- */
- FlowStatsCollector(Timer timer, OpenFlowSwitch sw, int pollInterval) {
- this.timer = timer;
- this.sw = sw;
- this.pollInterval = pollInterval;
- }
-
- /**
- * Adjusts poll frequency.
- *
- * @param pollInterval poll frequency in seconds
- */
- synchronized void adjustPollInterval(int pollInterval) {
- this.pollInterval = pollInterval;
- task.cancel();
- task = new InternalTimerTask();
- timer.scheduleAtFixedRate(task, pollInterval * SECONDS, pollInterval * 1000);
- }
-
- private class InternalTimerTask extends TimerTask {
- @Override
- public void run() {
- if (sw.getRole() == RoleState.MASTER) {
- log.trace("Collecting stats for {}", sw.getStringId());
- OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest()
- .setMatch(sw.factory().matchWildcardAll())
- .setTableId(TableId.ALL)
- .setOutPort(OFPort.NO_MASK)
- .build();
- sw.sendMsg(request);
- }
- }
- }
-
- public synchronized void start() {
- // Initially start polling quickly. Then drop down to configured value
- log.debug("Starting Stats collection thread for {}", sw.getStringId());
- task = new InternalTimerTask();
- SharedExecutors.getTimer().scheduleAtFixedRate(task, 1 * SECONDS,
- pollInterval * SECONDS);
- }
-
- public synchronized void stop() {
- log.debug("Stopping Stats collection thread for {}", sw.getStringId());
- task.cancel();
- task = null;
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java
deleted file mode 100644
index d5186fa9..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java
+++ /dev/null
@@ -1,882 +0,0 @@
-/*
- * 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.of.flow.impl;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import org.onosproject.net.flow.DefaultTypedFlowEntry;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowId;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.StoredFlowEntry;
-import org.onosproject.net.flow.TypedStoredFlowEntry;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFFlowStatsRequest;
-import org.projectfloodlight.openflow.protocol.match.Match;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.TableId;
-import org.slf4j.Logger;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.net.flow.TypedStoredFlowEntry.FlowLiveType;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Efficiently and adaptively collects flow statistics for the specified switch.
- */
-public class NewAdaptiveFlowStatsCollector {
-
- private final Logger log = getLogger(getClass());
-
- private final OpenFlowSwitch sw;
-
- private ScheduledExecutorService adaptiveFlowStatsScheduler =
- Executors.newScheduledThreadPool(4, groupedThreads("onos/flow", "device-stats-collector-%d"));
- private ScheduledFuture<?> calAndShortFlowsThread;
- private ScheduledFuture<?> midFlowsThread;
- private ScheduledFuture<?> longFlowsThread;
-
- // Task that calculates all flowEntries' FlowLiveType and collects stats IMMEDIATE flows every calAndPollInterval
- private CalAndShortFlowsTask calAndShortFlowsTask;
- // Task that collects stats MID flows every 2*calAndPollInterval
- private MidFlowsTask midFlowsTask;
- // Task that collects stats LONG flows every 3*calAndPollInterval
- private LongFlowsTask longFlowsTask;
-
- private static final int CAL_AND_POLL_TIMES = 1; // must be always 0
- private static final int MID_POLL_TIMES = 2; // variable greater or equal than 1
- private static final int LONG_POLL_TIMES = 3; // variable greater or equal than MID_POLL_TIMES
- //TODO: make ENTIRE_POLL_TIMES configurable with enable or disable
- // must be variable greater or equal than common multiple of MID_POLL_TIMES and LONG_POLL_TIMES
- private static final int ENTIRE_POLL_TIMES = 6;
-
- private static final int DEFAULT_CAL_AND_POLL_FREQUENCY = 5;
- private static final int MIN_CAL_AND_POLL_FREQUENCY = 2;
- private static final int MAX_CAL_AND_POLL_FREQUENCY = 60;
-
- private int calAndPollInterval; // CAL_AND_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;
- private int midPollInterval; // MID_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;
- private int longPollInterval; // LONG_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;
- // only used for checking condition at each task if it collects entire flows from a given switch or not
- private int entirePollInterval; // ENTIRE_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;
-
- // Number of call count of each Task,
- // for undoing collection except only entire flows collecting task in CalAndShortFlowsTask
- private int callCountCalAndShortFlowsTask = 0; // increased CAL_AND_POLL_TIMES whenever Task is called
- private int callCountMidFlowsTask = 0; // increased MID_POLL_TIMES whenever Task is called
- private int callCountLongFlowsTask = 0; // increased LONG_POLL_TIMES whenever Task is called
-
- private InternalDeviceFlowTable deviceFlowTable = new InternalDeviceFlowTable();
-
- private boolean isFirstTimeStart = true;
-
- public static final long NO_FLOW_MISSING_XID = (-1);
- private long flowMissingXid = NO_FLOW_MISSING_XID;
-
- /**
- * Creates a new adaptive collector for the given switch and default cal_and_poll frequency.
- *
- * @param sw switch to pull
- * @param pollInterval cal and immediate poll frequency in seconds
- */
- NewAdaptiveFlowStatsCollector(OpenFlowSwitch sw, int pollInterval) {
- this.sw = sw;
-
- initMemberVars(pollInterval);
- }
-
- // check calAndPollInterval validity and set all pollInterval values and finally initialize each task call count
- private void initMemberVars(int pollInterval) {
- if (pollInterval < MIN_CAL_AND_POLL_FREQUENCY) {
- this.calAndPollInterval = MIN_CAL_AND_POLL_FREQUENCY;
- } else if (pollInterval >= MAX_CAL_AND_POLL_FREQUENCY) {
- this.calAndPollInterval = MAX_CAL_AND_POLL_FREQUENCY;
- } else {
- this.calAndPollInterval = pollInterval;
- }
-
- calAndPollInterval = CAL_AND_POLL_TIMES * calAndPollInterval;
- midPollInterval = MID_POLL_TIMES * calAndPollInterval;
- longPollInterval = LONG_POLL_TIMES * calAndPollInterval;
- entirePollInterval = ENTIRE_POLL_TIMES * calAndPollInterval;
-
- callCountCalAndShortFlowsTask = 0;
- callCountMidFlowsTask = 0;
- callCountLongFlowsTask = 0;
-
- flowMissingXid = NO_FLOW_MISSING_XID;
- }
-
- /**
- * Adjusts adaptive poll frequency.
- *
- * @param pollInterval poll frequency in seconds
- */
- synchronized void adjustCalAndPollInterval(int pollInterval) {
- initMemberVars(pollInterval);
-
- if (calAndShortFlowsThread != null) {
- calAndShortFlowsThread.cancel(false);
- }
- if (midFlowsThread != null) {
- midFlowsThread.cancel(false);
- }
- if (longFlowsThread != null) {
- longFlowsThread.cancel(false);
- }
-
- calAndShortFlowsTask = new CalAndShortFlowsTask();
- calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(
- calAndShortFlowsTask,
- 0,
- calAndPollInterval,
- TimeUnit.SECONDS);
-
- midFlowsTask = new MidFlowsTask();
- midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(
- midFlowsTask,
- 0,
- midPollInterval,
- TimeUnit.SECONDS);
-
- longFlowsTask = new LongFlowsTask();
- longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(
- longFlowsTask,
- 0,
- longPollInterval,
- TimeUnit.SECONDS);
-
- log.debug("calAndPollInterval=" + calAndPollInterval + "is adjusted");
- }
-
- private class CalAndShortFlowsTask implements Runnable {
- @Override
- public void run() {
- if (sw.getRole() == RoleState.MASTER) {
- log.trace("CalAndShortFlowsTask Collecting AdaptiveStats for {}", sw.getStringId());
-
- if (isFirstTimeStart) {
- // isFirstTimeStart, get entire flow stats from a given switch sw
- log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats at first time start for {}",
- sw.getStringId());
- ofFlowStatsRequestAllSend();
-
- callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES;
- isFirstTimeStart = false;
- } else if (callCountCalAndShortFlowsTask == ENTIRE_POLL_TIMES) {
- // entire_poll_times, get entire flow stats from a given switch sw
- log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats for {}", sw.getStringId());
- ofFlowStatsRequestAllSend();
-
- callCountCalAndShortFlowsTask = CAL_AND_POLL_TIMES;
- //TODO: check flows deleted in switch, but exist in controller flow table, then remove them
- //
- } else {
- calAndShortFlowsTaskInternal();
- callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES;
- }
- }
- }
- }
-
- // send openflow flow stats request message with getting all flow entries to a given switch sw
- private void ofFlowStatsRequestAllSend() {
- OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest()
- .setMatch(sw.factory().matchWildcardAll())
- .setTableId(TableId.ALL)
- .setOutPort(OFPort.NO_MASK)
- .build();
-
- synchronized (this) {
- // set the request xid to check the reply in OpenFlowRuleProvider
- // After processing the reply of this request message,
- // this must be set to NO_FLOW_MISSING_XID(-1) by provider
- setFlowMissingXid(request.getXid());
- log.debug("ofFlowStatsRequestAllSend,Request={},for {}", request.toString(), sw.getStringId());
-
- sw.sendMsg(request);
- }
- }
-
- // send openflow flow stats request message with getting the specific flow entry(fe) to a given switch sw
- private void ofFlowStatsRequestFlowSend(FlowEntry fe) {
- // set find match
- Match match = FlowModBuilder.builder(fe, sw.factory(), Optional.empty(),
- Optional.empty()).buildMatch();
- // set find tableId
- TableId tableId = TableId.of(fe.tableId());
- // set output port
- Instruction ins = fe.treatment().allInstructions().stream()
- .filter(i -> (i.type() == Instruction.Type.OUTPUT))
- .findFirst()
- .orElse(null);
- OFPort ofPort = OFPort.NO_MASK;
- if (ins != null) {
- Instructions.OutputInstruction out = (Instructions.OutputInstruction) ins;
- ofPort = OFPort.of((int) ((out.port().toLong())));
- }
-
- OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest()
- .setMatch(match)
- .setTableId(tableId)
- .setOutPort(ofPort)
- .build();
-
- synchronized (this) {
- if (getFlowMissingXid() != NO_FLOW_MISSING_XID) {
- log.debug("ofFlowStatsRequestFlowSend: previous FlowStatsRequestAll does not be processed yet,"
- + " set no flow missing xid anyway, for {}",
- sw.getStringId());
- setFlowMissingXid(NO_FLOW_MISSING_XID);
- }
-
- sw.sendMsg(request);
- }
- }
-
- private void calAndShortFlowsTaskInternal() {
- deviceFlowTable.checkAndMoveLiveFlowAll();
-
- deviceFlowTable.getShortFlows().forEach(fe -> {
- ofFlowStatsRequestFlowSend(fe);
- });
- }
-
- private class MidFlowsTask implements Runnable {
- @Override
- public void run() {
- if (sw.getRole() == RoleState.MASTER) {
- log.trace("MidFlowsTask Collecting AdaptiveStats for {}", sw.getStringId());
-
- // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw
- if (callCountMidFlowsTask == ENTIRE_POLL_TIMES) {
- callCountMidFlowsTask = MID_POLL_TIMES;
- } else {
- midFlowsTaskInternal();
- callCountMidFlowsTask += MID_POLL_TIMES;
- }
- }
- }
- }
-
- private void midFlowsTaskInternal() {
- deviceFlowTable.getMidFlows().forEach(fe -> {
- ofFlowStatsRequestFlowSend(fe);
- });
- }
-
- private class LongFlowsTask implements Runnable {
- @Override
- public void run() {
- if (sw.getRole() == RoleState.MASTER) {
- log.trace("LongFlowsTask Collecting AdaptiveStats for {}", sw.getStringId());
-
- // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw
- if (callCountLongFlowsTask == ENTIRE_POLL_TIMES) {
- callCountLongFlowsTask = LONG_POLL_TIMES;
- } else {
- longFlowsTaskInternal();
- callCountLongFlowsTask += LONG_POLL_TIMES;
- }
- }
- }
- }
-
- private void longFlowsTaskInternal() {
- deviceFlowTable.getLongFlows().forEach(fe -> {
- ofFlowStatsRequestFlowSend(fe);
- });
- }
-
- /**
- * start adaptive flow statistic collection.
- *
- */
- public synchronized void start() {
- log.debug("Starting AdaptiveStats collection thread for {}", sw.getStringId());
- callCountCalAndShortFlowsTask = 0;
- callCountMidFlowsTask = 0;
- callCountLongFlowsTask = 0;
-
- isFirstTimeStart = true;
-
- // Initially start polling quickly. Then drop down to configured value
- calAndShortFlowsTask = new CalAndShortFlowsTask();
- calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(
- calAndShortFlowsTask,
- 1,
- calAndPollInterval,
- TimeUnit.SECONDS);
-
- midFlowsTask = new MidFlowsTask();
- midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(
- midFlowsTask,
- 1,
- midPollInterval,
- TimeUnit.SECONDS);
-
- longFlowsTask = new LongFlowsTask();
- longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(
- longFlowsTask,
- 1,
- longPollInterval,
- TimeUnit.SECONDS);
-
- log.info("Started");
- }
-
- /**
- * stop adaptive flow statistic collection.
- *
- */
- public synchronized void stop() {
- log.debug("Stopping AdaptiveStats collection thread for {}", sw.getStringId());
- if (calAndShortFlowsThread != null) {
- calAndShortFlowsThread.cancel(true);
- }
- if (midFlowsThread != null) {
- midFlowsThread.cancel(true);
- }
- if (longFlowsThread != null) {
- longFlowsThread.cancel(true);
- }
-
- adaptiveFlowStatsScheduler.shutdownNow();
-
- isFirstTimeStart = false;
-
- log.info("Stopped");
- }
-
- /**
- * add typed flow entry from flow rule into the internal flow table.
- *
- * @param flowRules the flow rules
- *
- */
- public synchronized void addWithFlowRule(FlowRule... flowRules) {
- for (FlowRule fr : flowRules) {
- // First remove old entry unconditionally, if exist
- deviceFlowTable.remove(fr);
-
- // add new flow entry, we suppose IMMEDIATE_FLOW
- TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fr,
- FlowLiveType.IMMEDIATE_FLOW);
- deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry);
- }
- }
-
- /**
- * add or update typed flow entry from flow entry into the internal flow table.
- *
- * @param flowEntries the flow entries
- *
- */
- public synchronized void addOrUpdateFlows(FlowEntry... flowEntries) {
- for (FlowEntry fe : flowEntries) {
- // check if this new rule is an update to an existing entry
- TypedStoredFlowEntry stored = deviceFlowTable.getFlowEntry(fe);
-
- if (stored != null) {
- // duplicated flow entry is collected!, just skip
- if (fe.bytes() == stored.bytes() && fe.packets() == stored.packets()
- && fe.life() == stored.life()) {
- log.debug("addOrUpdateFlows:, FlowId=" + Long.toHexString(fe.id().value())
- + ",is DUPLICATED stats collection, just skip."
- + " AdaptiveStats collection thread for {}",
- sw.getStringId());
-
- stored.setLastSeen();
- continue;
- } else if (fe.life() < stored.life()) {
- // Invalid updates the stats values, i.e., bytes, packets, durations ...
- log.debug("addOrUpdateFlows():" +
- " Invalid Flow Update! The new life is SMALLER than the previous one, jus skip." +
- " new flowId=" + Long.toHexString(fe.id().value()) +
- ", old flowId=" + Long.toHexString(stored.id().value()) +
- ", new bytes=" + fe.bytes() + ", old bytes=" + stored.bytes() +
- ", new life=" + fe.life() + ", old life=" + stored.life() +
- ", new lastSeen=" + fe.lastSeen() + ", old lastSeen=" + stored.lastSeen());
- // go next
- stored.setLastSeen();
- continue;
- }
-
- // update now
- stored.setLife(fe.life());
- stored.setPackets(fe.packets());
- stored.setBytes(fe.bytes());
- stored.setLastSeen();
- if (stored.state() == FlowEntry.FlowEntryState.PENDING_ADD) {
- // flow is really RULE_ADDED
- stored.setState(FlowEntry.FlowEntryState.ADDED);
- }
- // flow is RULE_UPDATED, skip adding and just updating flow live table
- //deviceFlowTable.calAndSetFlowLiveType(stored);
- continue;
- }
-
- // add new flow entry, we suppose IMMEDIATE_FLOW
- TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fe,
- FlowLiveType.IMMEDIATE_FLOW);
- deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry);
- }
- }
-
- /**
- * remove typed flow entry from the internal flow table.
- *
- * @param flowRules the flow entries
- *
- */
- public synchronized void removeFlows(FlowRule... flowRules) {
- for (FlowRule rule : flowRules) {
- deviceFlowTable.remove(rule);
- }
- }
-
- // same as removeFlows() function
- /**
- * remove typed flow entry from the internal flow table.
- *
- * @param flowRules the flow entries
- *
- */
- public void flowRemoved(FlowRule... flowRules) {
- removeFlows(flowRules);
- }
-
- // same as addOrUpdateFlows() function
- /**
- * add or update typed flow entry from flow entry into the internal flow table.
- *
- * @param flowEntries the flow entry list
- *
- */
- public void pushFlowMetrics(List<FlowEntry> flowEntries) {
- flowEntries.forEach(fe -> {
- addOrUpdateFlows(fe);
- });
- }
-
- /**
- * returns flowMissingXid that indicates the execution of flowMissing process or not(NO_FLOW_MISSING_XID(-1)).
- *
- * @return xid of missing flow
- */
- public long getFlowMissingXid() {
- return flowMissingXid;
- }
-
- /**
- * set flowMissingXid, namely OFFlowStatsRequest match any ALL message Id.
- *
- * @param flowMissingXid the OFFlowStatsRequest message Id
- *
- */
- public void setFlowMissingXid(long flowMissingXid) {
- this.flowMissingXid = flowMissingXid;
- }
-
- private class InternalDeviceFlowTable {
-
- private final Map<FlowId, Set<TypedStoredFlowEntry>>
- flowEntries = Maps.newConcurrentMap();
-
- private final Set<StoredFlowEntry> shortFlows = new HashSet<>();
- private final Set<StoredFlowEntry> midFlows = new HashSet<>();
- private final Set<StoredFlowEntry> longFlows = new HashSet<>();
-
- // Assumed latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply
- private final long latencyFlowStatsRequestAndReplyMillis = 500;
-
-
- // Statistics for table operation
- private long addCount = 0, addWithSetFlowLiveTypeCount = 0;
- private long removeCount = 0;
-
- /**
- * Resets all count values with zero.
- *
- */
- public void resetAllCount() {
- addCount = 0;
- addWithSetFlowLiveTypeCount = 0;
- removeCount = 0;
- }
-
- // get set of flow entries for the given flowId
- private Set<TypedStoredFlowEntry> getFlowEntriesInternal(FlowId flowId) {
- return flowEntries.computeIfAbsent(flowId, id -> Sets.newCopyOnWriteArraySet());
- }
-
- // get flow entry for the given flow rule
- private TypedStoredFlowEntry getFlowEntryInternal(FlowRule rule) {
- Set<TypedStoredFlowEntry> flowEntries = getFlowEntriesInternal(rule.id());
- return flowEntries.stream()
- .filter(entry -> Objects.equal(entry, rule))
- .findAny()
- .orElse(null);
- }
-
- // get the flow entries for all flows in flow table
- private Set<TypedStoredFlowEntry> getFlowEntriesInternal() {
- Set<TypedStoredFlowEntry> result = Sets.newHashSet();
-
- flowEntries.values().forEach(result::addAll);
- return result;
- }
-
- /**
- * Gets the number of flow entry in flow table.
- *
- * @return the number of flow entry.
- *
- */
- public long getFlowCount() {
- return flowEntries.values().stream().mapToLong(Set::size).sum();
- }
-
- /**
- * Gets the number of flow entry in flow table.
- *
- * @param rule the flow rule
- * @return the typed flow entry.
- *
- */
- public TypedStoredFlowEntry getFlowEntry(FlowRule rule) {
- checkNotNull(rule);
-
- return getFlowEntryInternal(rule);
- }
-
- /**
- * Gets the all typed flow entries in flow table.
- *
- * @return the set of typed flow entry.
- *
- */
- public Set<TypedStoredFlowEntry> getFlowEntries() {
- return getFlowEntriesInternal();
- }
-
- /**
- * Gets the short typed flow entries in flow table.
- *
- * @return the set of typed flow entry.
- *
- */
- public Set<StoredFlowEntry> getShortFlows() {
- return ImmutableSet.copyOf(shortFlows); //Sets.newHashSet(shortFlows);
- }
-
- /**
- * Gets the mid typed flow entries in flow table.
- *
- * @return the set of typed flow entry.
- *
- */
- public Set<StoredFlowEntry> getMidFlows() {
- return ImmutableSet.copyOf(midFlows); //Sets.newHashSet(midFlows);
- }
-
- /**
- * Gets the long typed flow entries in flow table.
- *
- * @return the set of typed flow entry.
- *
- */
- public Set<StoredFlowEntry> getLongFlows() {
- return ImmutableSet.copyOf(longFlows); //Sets.newHashSet(longFlows);
- }
-
- /**
- * Add typed flow entry into table only.
- *
- * @param rule the flow rule
- *
- */
- public synchronized void add(TypedStoredFlowEntry rule) {
- checkNotNull(rule);
-
- //rule have to be new DefaultTypedFlowEntry
- boolean result = getFlowEntriesInternal(rule.id()).add(rule);
-
- if (result) {
- addCount++;
- }
- }
-
- /**
- * Calculates and set the flow live type at the first time,
- * and then add it into a corresponding typed flow table.
- *
- * @param rule the flow rule
- *
- */
- public void calAndSetFlowLiveType(TypedStoredFlowEntry rule) {
- checkNotNull(rule);
-
- calAndSetFlowLiveTypeInternal(rule);
- }
-
- /**
- * Add the typed flow entry into table, and calculates and set the flow live type,
- * and then add it into a corresponding typed flow table.
- *
- * @param rule the flow rule
- *
- */
- public synchronized void addWithCalAndSetFlowLiveType(TypedStoredFlowEntry rule) {
- checkNotNull(rule);
-
- //rule have to be new DefaultTypedFlowEntry
- boolean result = getFlowEntriesInternal(rule.id()).add(rule);
- if (result) {
- calAndSetFlowLiveTypeInternal(rule);
- addWithSetFlowLiveTypeCount++;
- } else {
- log.debug("addWithCalAndSetFlowLiveType, FlowId=" + Long.toHexString(rule.id().value())
- + " ADD Failed, cause it may already exists in table !!!,"
- + " AdaptiveStats collection thread for {}",
- sw.getStringId());
- }
- }
-
- // In real, calculates and set the flow live type at the first time,
- // and then add it into a corresponding typed flow table
- private void calAndSetFlowLiveTypeInternal(TypedStoredFlowEntry rule) {
- long life = rule.life();
- FlowLiveType prevFlowLiveType = rule.flowLiveType();
-
- if (life >= longPollInterval) {
- rule.setFlowLiveType(FlowLiveType.LONG_FLOW);
- longFlows.add(rule);
- } else if (life >= midPollInterval) {
- rule.setFlowLiveType(FlowLiveType.MID_FLOW);
- midFlows.add(rule);
- } else if (life >= calAndPollInterval) {
- rule.setFlowLiveType(FlowLiveType.SHORT_FLOW);
- shortFlows.add(rule);
- } else if (life >= 0) {
- rule.setFlowLiveType(FlowLiveType.IMMEDIATE_FLOW);
- } else { // life < 0
- rule.setFlowLiveType(FlowLiveType.UNKNOWN_FLOW);
- }
-
- if (rule.flowLiveType() != prevFlowLiveType) {
- switch (prevFlowLiveType) {
- // delete it from previous flow table
- case SHORT_FLOW:
- shortFlows.remove(rule);
- break;
- case MID_FLOW:
- midFlows.remove(rule);
- break;
- case LONG_FLOW:
- longFlows.remove(rule);
- break;
- default:
- break;
- }
- }
- }
-
-
- // check the flow live type based on current time, then set and add it into corresponding table
- private boolean checkAndMoveLiveFlowInternal(TypedStoredFlowEntry fe, long cTime) {
- long curTime = (cTime > 0 ? cTime : System.currentTimeMillis());
- // For latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply
- long fromLastSeen = ((curTime - fe.lastSeen() + latencyFlowStatsRequestAndReplyMillis) / 1000);
- // fe.life() unit is SECOND!
- long liveTime = fe.life() + fromLastSeen;
-
-
- switch (fe.flowLiveType()) {
- case IMMEDIATE_FLOW:
- if (liveTime >= longPollInterval) {
- fe.setFlowLiveType(FlowLiveType.LONG_FLOW);
- longFlows.add(fe);
- } else if (liveTime >= midPollInterval) {
- fe.setFlowLiveType(FlowLiveType.MID_FLOW);
- midFlows.add(fe);
- } else if (liveTime >= calAndPollInterval) {
- fe.setFlowLiveType(FlowLiveType.SHORT_FLOW);
- shortFlows.add(fe);
- }
- break;
- case SHORT_FLOW:
- if (liveTime >= longPollInterval) {
- fe.setFlowLiveType(FlowLiveType.LONG_FLOW);
- shortFlows.remove(fe);
- longFlows.add(fe);
- } else if (liveTime >= midPollInterval) {
- fe.setFlowLiveType(FlowLiveType.MID_FLOW);
- shortFlows.remove(fe);
- midFlows.add(fe);
- }
- break;
- case MID_FLOW:
- if (liveTime >= longPollInterval) {
- fe.setFlowLiveType(FlowLiveType.LONG_FLOW);
- midFlows.remove(fe);
- longFlows.add(fe);
- }
- break;
- case LONG_FLOW:
- if (fromLastSeen > entirePollInterval) {
- log.trace("checkAndMoveLiveFlowInternal, flow is already removed at switch.");
- return false;
- }
- break;
- case UNKNOWN_FLOW: // Unknown flow is an internal error flow type, just fall through
- default :
- // Error Unknown Live Type
- log.error("checkAndMoveLiveFlowInternal, Unknown Live Type error!"
- + "AdaptiveStats collection thread for {}",
- sw.getStringId());
- return false;
- }
-
- log.debug("checkAndMoveLiveFlowInternal, FlowId=" + Long.toHexString(fe.id().value())
- + ", state=" + fe.state()
- + ", After liveType=" + fe.flowLiveType()
- + ", liveTime=" + liveTime
- + ", life=" + fe.life()
- + ", bytes=" + fe.bytes()
- + ", packets=" + fe.packets()
- + ", fromLastSeen=" + fromLastSeen
- + ", priority=" + fe.priority()
- + ", selector=" + fe.selector().criteria()
- + ", treatment=" + fe.treatment()
- + " AdaptiveStats collection thread for {}",
- sw.getStringId());
-
- return true;
- }
-
- /**
- * Check and move live type for all type flow entries in table at every calAndPollInterval time.
- *
- */
- public void checkAndMoveLiveFlowAll() {
- Set<TypedStoredFlowEntry> typedFlowEntries = getFlowEntriesInternal();
-
- long calCurTime = System.currentTimeMillis();
- typedFlowEntries.forEach(fe -> {
- if (!checkAndMoveLiveFlowInternal(fe, calCurTime)) {
- remove(fe);
- }
- });
-
- // print table counts for debug
- if (log.isDebugEnabled()) {
- synchronized (this) {
- long totalFlowCount = getFlowCount();
- long shortFlowCount = shortFlows.size();
- long midFlowCount = midFlows.size();
- long longFlowCount = longFlows.size();
- long immediateFlowCount = totalFlowCount - shortFlowCount - midFlowCount - longFlowCount;
- long calTotalCount = addCount + addWithSetFlowLiveTypeCount - removeCount;
-
- log.debug("--------------------------------------------------------------------------- for {}",
- sw.getStringId());
- log.debug("checkAndMoveLiveFlowAll, Total Flow_Count=" + totalFlowCount
- + ", add - remove_Count=" + calTotalCount
- + ", IMMEDIATE_FLOW_Count=" + immediateFlowCount
- + ", SHORT_FLOW_Count=" + shortFlowCount
- + ", MID_FLOW_Count=" + midFlowCount
- + ", LONG_FLOW_Count=" + longFlowCount
- + ", add_Count=" + addCount
- + ", addWithSetFlowLiveType_Count=" + addWithSetFlowLiveTypeCount
- + ", remove_Count=" + removeCount
- + " AdaptiveStats collection thread for {}", sw.getStringId());
- log.debug("--------------------------------------------------------------------------- for {}",
- sw.getStringId());
- if (totalFlowCount != calTotalCount) {
- log.error("checkAndMoveLiveFlowAll, Real total flow count and "
- + "calculated total flow count do NOT match, something is wrong internally "
- + "or check counter value bound is over!");
- }
- if (immediateFlowCount < 0) {
- log.error("checkAndMoveLiveFlowAll, IMMEDIATE_FLOW count is negative, "
- + "something is wrong internally "
- + "or check counter value bound is over!");
- }
- }
- }
- log.trace("checkAndMoveLiveFlowAll, AdaptiveStats for {}", sw.getStringId());
- }
-
- /**
- * Remove the typed flow entry from table.
- *
- * @param rule the flow rule
- *
- */
- public synchronized void remove(FlowRule rule) {
- checkNotNull(rule);
-
- TypedStoredFlowEntry removeStore = getFlowEntryInternal(rule);
- if (removeStore != null) {
- removeLiveFlowsInternal((TypedStoredFlowEntry) removeStore);
- boolean result = getFlowEntriesInternal(rule.id()).remove(removeStore);
-
- if (result) {
- removeCount++;
- }
- }
- }
-
- // Remove the typed flow entry from corresponding table
- private void removeLiveFlowsInternal(TypedStoredFlowEntry fe) {
- switch (fe.flowLiveType()) {
- case IMMEDIATE_FLOW:
- // do nothing
- break;
- case SHORT_FLOW:
- shortFlows.remove(fe);
- break;
- case MID_FLOW:
- midFlows.remove(fe);
- break;
- case LONG_FLOW:
- longFlows.remove(fe);
- break;
- default: // error in Flow Live Type
- log.error("removeLiveFlowsInternal, Unknown Live Type error!");
- break;
- }
- }
- }
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NoMappingFoundException.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NoMappingFoundException.java
deleted file mode 100644
index 898b286d..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NoMappingFoundException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.of.flow.impl;
-
-/**
- * Thrown to indicate that no mapping for the input value is found.
- */
-public class NoMappingFoundException extends RuntimeException {
- /**
- * Creates an instance with the specified values.
- *
- * @param input input value of mapping causing this exception
- * @param output the desired class which the input value is mapped to
- */
- public NoMappingFoundException(Object input, Class<?> output) {
- super(String.format("No mapping found for %s when converting to %s", input, output.getName()));
- }
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
deleted file mode 100644
index b37cb42c..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * 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.of.flow.impl;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.RemovalCause;
-import com.google.common.cache.RemovalNotification;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-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.Modified;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.flow.CompletedBatchOperation;
-import org.onosproject.net.flow.DefaultTableStatisticsEntry;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.FlowRuleBatchEntry;
-import org.onosproject.net.flow.FlowRuleBatchOperation;
-import org.onosproject.net.flow.FlowRuleExtPayLoad;
-import org.onosproject.net.flow.FlowRuleProvider;
-import org.onosproject.net.flow.FlowRuleProviderRegistry;
-import org.onosproject.net.flow.FlowRuleProviderService;
-import org.onosproject.net.flow.TableStatisticsEntry;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.statistic.DefaultLoad;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.RoleState;
-import org.onosproject.openflow.controller.ThirdPartyMessage;
-import org.osgi.service.component.ComponentContext;
-import org.projectfloodlight.openflow.protocol.OFBadRequestCode;
-import org.projectfloodlight.openflow.protocol.OFBarrierRequest;
-import org.projectfloodlight.openflow.protocol.OFErrorMsg;
-import org.projectfloodlight.openflow.protocol.OFErrorType;
-import org.projectfloodlight.openflow.protocol.OFFlowMod;
-import org.projectfloodlight.openflow.protocol.OFFlowRemoved;
-import org.projectfloodlight.openflow.protocol.OFFlowStatsReply;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFPortStatus;
-import org.projectfloodlight.openflow.protocol.OFStatsReply;
-import org.projectfloodlight.openflow.protocol.OFStatsType;
-import org.projectfloodlight.openflow.protocol.OFTableStatsEntry;
-import org.projectfloodlight.openflow.protocol.OFTableStatsReply;
-import org.projectfloodlight.openflow.protocol.errormsg.OFBadRequestErrorMsg;
-import org.projectfloodlight.openflow.protocol.errormsg.OFFlowModFailedErrorMsg;
-import org.slf4j.Logger;
-
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.Timer;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onlab.util.Tools.get;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider which uses an OpenFlow controller to detect network end-station
- * hosts.
- */
-@Component(immediate = true)
-public class OpenFlowRuleProvider extends AbstractProvider
- implements FlowRuleProvider {
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected FlowRuleProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OpenFlowController controller;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ComponentConfigService cfgService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DriverService driverService;
-
- private static final int DEFAULT_POLL_FREQUENCY = 5;
- @Property(name = "flowPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
- label = "Frequency (in seconds) for polling flow statistics")
- private int flowPollFrequency = DEFAULT_POLL_FREQUENCY;
-
- private static final boolean DEFAULT_ADAPTIVE_FLOW_SAMPLING = true;
- @Property(name = "adaptiveFlowSampling", boolValue = DEFAULT_ADAPTIVE_FLOW_SAMPLING,
- label = "Adaptive Flow Sampling is on or off")
- private boolean adaptiveFlowSampling = DEFAULT_ADAPTIVE_FLOW_SAMPLING;
-
- private FlowRuleProviderService providerService;
-
- private final InternalFlowProvider listener = new InternalFlowProvider();
-
- private Cache<Long, InternalCacheEntry> pendingBatches;
-
- private final Timer timer = new Timer("onos-openflow-collector");
- private final Map<Dpid, FlowStatsCollector> simpleCollectors = Maps.newHashMap();
-
- // NewAdaptiveFlowStatsCollector Set
- private final Map<Dpid, NewAdaptiveFlowStatsCollector> afsCollectors = Maps.newHashMap();
- private final Map<Dpid, FlowStatsCollector> collectors = Maps.newHashMap();
- private final Map<Dpid, TableStatisticsCollector> tableStatsCollectors = Maps.newHashMap();
-
- /**
- * Creates an OpenFlow host provider.
- */
- public OpenFlowRuleProvider() {
- super(new ProviderId("of", "org.onosproject.provider.openflow"));
- }
-
- @Activate
- public void activate(ComponentContext context) {
- cfgService.registerProperties(getClass());
- providerService = providerRegistry.register(this);
- controller.addListener(listener);
- controller.addEventListener(listener);
-
- pendingBatches = createBatchCache();
-
- createCollectors();
-
- log.info("Started with flowPollFrequency = {}, adaptiveFlowSampling = {}",
- flowPollFrequency, adaptiveFlowSampling);
- }
-
- @Deactivate
- public void deactivate(ComponentContext context) {
- cfgService.unregisterProperties(getClass(), false);
- stopCollectors();
- providerRegistry.unregister(this);
- providerService = null;
-
- log.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- Dictionary<?, ?> properties = context.getProperties();
- int newFlowPollFrequency;
- try {
- String s = get(properties, "flowPollFrequency");
- newFlowPollFrequency = isNullOrEmpty(s) ? flowPollFrequency : Integer.parseInt(s.trim());
-
- } catch (NumberFormatException | ClassCastException e) {
- newFlowPollFrequency = flowPollFrequency;
- }
-
- if (newFlowPollFrequency != flowPollFrequency) {
- flowPollFrequency = newFlowPollFrequency;
- adjustRate();
- }
-
- log.info("Settings: flowPollFrequency={}", flowPollFrequency);
-
- boolean newAdaptiveFlowSampling;
- String s = get(properties, "adaptiveFlowSampling");
- newAdaptiveFlowSampling = isNullOrEmpty(s) ? adaptiveFlowSampling : Boolean.parseBoolean(s.trim());
-
- if (newAdaptiveFlowSampling != adaptiveFlowSampling) {
- // stop previous collector
- stopCollectors();
- adaptiveFlowSampling = newAdaptiveFlowSampling;
- // create new collectors
- createCollectors();
- }
-
- log.info("Settings: adaptiveFlowSampling={}", adaptiveFlowSampling);
- }
-
- private Cache<Long, InternalCacheEntry> createBatchCache() {
- return CacheBuilder.newBuilder()
- .expireAfterWrite(10, TimeUnit.SECONDS)
- .removalListener((RemovalNotification<Long, InternalCacheEntry> notification) -> {
- if (notification.getCause() == RemovalCause.EXPIRED) {
- providerService.batchOperationCompleted(notification.getKey(),
- notification.getValue().failedCompletion());
- }
- }).build();
- }
-
- private void createCollectors() {
- controller.getSwitches().forEach(this::createCollector);
- }
-
- private void createCollector(OpenFlowSwitch sw) {
- if (adaptiveFlowSampling) {
- // NewAdaptiveFlowStatsCollector Constructor
- NewAdaptiveFlowStatsCollector fsc = new NewAdaptiveFlowStatsCollector(sw, flowPollFrequency);
- fsc.start();
- afsCollectors.put(new Dpid(sw.getId()), fsc);
- } else {
- FlowStatsCollector fsc = new FlowStatsCollector(timer, sw, flowPollFrequency);
- fsc.start();
- simpleCollectors.put(new Dpid(sw.getId()), fsc);
- }
- TableStatisticsCollector tsc = new TableStatisticsCollector(timer, sw, flowPollFrequency);
- tsc.start();
- tableStatsCollectors.put(new Dpid(sw.getId()), tsc);
- }
-
- private void stopCollectors() {
- if (adaptiveFlowSampling) {
- // NewAdaptiveFlowStatsCollector Destructor
- afsCollectors.values().forEach(NewAdaptiveFlowStatsCollector::stop);
- afsCollectors.clear();
- } else {
- simpleCollectors.values().forEach(FlowStatsCollector::stop);
- simpleCollectors.clear();
- }
- tableStatsCollectors.values().forEach(TableStatisticsCollector::stop);
- tableStatsCollectors.clear();
- }
-
- private void adjustRate() {
- DefaultLoad.setPollInterval(flowPollFrequency);
- if (adaptiveFlowSampling) {
- // NewAdaptiveFlowStatsCollector calAndPollInterval
- afsCollectors.values().forEach(fsc -> fsc.adjustCalAndPollInterval(flowPollFrequency));
- } else {
- simpleCollectors.values().forEach(fsc -> fsc.adjustPollInterval(flowPollFrequency));
- }
- tableStatsCollectors.values().forEach(tsc -> tsc.adjustPollInterval(flowPollFrequency));
- }
-
- @Override
- public void applyFlowRule(FlowRule... flowRules) {
- for (FlowRule flowRule : flowRules) {
- applyRule(flowRule);
- }
- }
-
- private void applyRule(FlowRule flowRule) {
- Dpid dpid = Dpid.dpid(flowRule.deviceId().uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
-
- FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad();
- if (hasPayload(flowRuleExtPayLoad)) {
- OFMessage msg = new ThirdPartyMessage(flowRuleExtPayLoad.payLoad());
- sw.sendMsg(msg);
- return;
- }
- sw.sendMsg(FlowModBuilder.builder(flowRule, sw.factory(),
- Optional.empty(), Optional.of(driverService)).buildFlowAdd());
-
- if (adaptiveFlowSampling) {
- // Add TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- NewAdaptiveFlowStatsCollector collector = afsCollectors.get(dpid);
- if (collector != null) {
- collector.addWithFlowRule(flowRule);
- }
- }
- }
-
- @Override
- public void removeFlowRule(FlowRule... flowRules) {
- for (FlowRule flowRule : flowRules) {
- removeRule(flowRule);
- }
- }
-
- private void removeRule(FlowRule flowRule) {
- Dpid dpid = Dpid.dpid(flowRule.deviceId().uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
-
- FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad();
- if (hasPayload(flowRuleExtPayLoad)) {
- OFMessage msg = new ThirdPartyMessage(flowRuleExtPayLoad.payLoad());
- sw.sendMsg(msg);
- return;
- }
- sw.sendMsg(FlowModBuilder.builder(flowRule, sw.factory(),
- Optional.empty(), Optional.of(driverService)).buildFlowDel());
-
- if (adaptiveFlowSampling) {
- // Remove TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- NewAdaptiveFlowStatsCollector collector = afsCollectors.get(dpid);
- if (collector != null) {
- collector.removeFlows(flowRule);
- }
- }
- }
-
- @Override
- public void removeRulesById(ApplicationId id, FlowRule... flowRules) {
- // TODO: optimize using the ApplicationId
- removeFlowRule(flowRules);
- }
-
- @Override
- public void executeBatch(FlowRuleBatchOperation batch) {
- checkNotNull(batch);
-
- pendingBatches.put(batch.id(), new InternalCacheEntry(batch));
-
- Dpid dpid = Dpid.dpid(batch.deviceId().uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- OFFlowMod mod;
- for (FlowRuleBatchEntry fbe : batch.getOperations()) {
- // flow is the third party privacy flow
-
- FlowRuleExtPayLoad flowRuleExtPayLoad = fbe.target().payLoad();
- if (hasPayload(flowRuleExtPayLoad)) {
- OFMessage msg = new ThirdPartyMessage(flowRuleExtPayLoad.payLoad());
- sw.sendMsg(msg);
- continue;
- }
- FlowModBuilder builder =
- FlowModBuilder.builder(fbe.target(), sw.factory(),
- Optional.of(batch.id()), Optional.of(driverService));
- NewAdaptiveFlowStatsCollector collector = afsCollectors.get(dpid);
- switch (fbe.operator()) {
- case ADD:
- mod = builder.buildFlowAdd();
- if (adaptiveFlowSampling && collector != null) {
- // Add TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- collector.addWithFlowRule(fbe.target());
- }
- break;
- case REMOVE:
- mod = builder.buildFlowDel();
- if (adaptiveFlowSampling && collector != null) {
- // Remove TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- collector.removeFlows(fbe.target());
- }
- break;
- case MODIFY:
- mod = builder.buildFlowMod();
- if (adaptiveFlowSampling && collector != null) {
- // Add or Update TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- // afsCollectors.get(dpid).addWithFlowRule(fbe.target()); //check if add is good or not
- collector.addOrUpdateFlows((FlowEntry) fbe.target());
- }
- break;
- default:
- log.error("Unsupported batch operation {}; skipping flowmod {}",
- fbe.operator(), fbe);
- continue;
- }
- sw.sendMsg(mod);
- }
- OFBarrierRequest.Builder builder = sw.factory().buildBarrierRequest()
- .setXid(batch.id());
- sw.sendMsg(builder.build());
- }
-
- private boolean hasPayload(FlowRuleExtPayLoad flowRuleExtPayLoad) {
- return flowRuleExtPayLoad != null &&
- flowRuleExtPayLoad.payLoad() != null &&
- flowRuleExtPayLoad.payLoad().length > 0;
- }
-
- private class InternalFlowProvider
- implements OpenFlowSwitchListener, OpenFlowEventListener {
-
- @Override
- public void switchAdded(Dpid dpid) {
-
- OpenFlowSwitch sw = controller.getSwitch(dpid);
-
- createCollector(controller.getSwitch(dpid));
- }
-
- @Override
- public void switchRemoved(Dpid dpid) {
- if (adaptiveFlowSampling) {
- NewAdaptiveFlowStatsCollector collector = afsCollectors.remove(dpid);
- if (collector != null) {
- collector.stop();
- }
- } else {
- FlowStatsCollector collector = simpleCollectors.remove(dpid);
- if (collector != null) {
- collector.stop();
- }
- }
- TableStatisticsCollector tsc = tableStatsCollectors.remove(dpid);
- if (tsc != null) {
- tsc.stop();
- }
- }
-
- @Override
- public void switchChanged(Dpid dpid) {
- }
-
- @Override
- public void portChanged(Dpid dpid, OFPortStatus status) {
- // TODO: Decide whether to evict flows internal store.
- }
-
- @Override
- public void handleMessage(Dpid dpid, OFMessage msg) {
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- switch (msg.getType()) {
- case FLOW_REMOVED:
- OFFlowRemoved removed = (OFFlowRemoved) msg;
-
- FlowEntry fr = new FlowEntryBuilder(dpid, removed, driverService).build();
- providerService.flowRemoved(fr);
-
- if (adaptiveFlowSampling) {
- // Removed TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- NewAdaptiveFlowStatsCollector collector = afsCollectors.get(dpid);
- if (collector != null) {
- collector.flowRemoved(fr);
- }
- }
- break;
- case STATS_REPLY:
- if (((OFStatsReply) msg).getStatsType() == OFStatsType.FLOW) {
- pushFlowMetrics(dpid, (OFFlowStatsReply) msg);
- } else if (((OFStatsReply) msg).getStatsType() == OFStatsType.TABLE) {
- pushTableStatistics(dpid, (OFTableStatsReply) msg);
- }
- break;
- case BARRIER_REPLY:
- try {
- InternalCacheEntry entry = pendingBatches.getIfPresent(msg.getXid());
- if (entry != null) {
- providerService
- .batchOperationCompleted(msg.getXid(),
- entry.completed());
- } else {
- log.warn("Received unknown Barrier Reply: {}",
- msg.getXid());
- }
- } finally {
- pendingBatches.invalidate(msg.getXid());
- }
- break;
- case ERROR:
- // TODO: This needs to get suppressed in a better way.
- if (msg instanceof OFBadRequestErrorMsg &&
- ((OFBadRequestErrorMsg) msg).getCode() == OFBadRequestCode.BAD_TYPE) {
- log.debug("Received error message {} from {}", msg, dpid);
- } else {
- log.warn("Received error message {} from {}", msg, dpid);
- }
-
- OFErrorMsg error = (OFErrorMsg) msg;
- if (error.getErrType() == OFErrorType.FLOW_MOD_FAILED) {
- OFFlowModFailedErrorMsg fmFailed = (OFFlowModFailedErrorMsg) error;
- if (fmFailed.getData().getParsedMessage().isPresent()) {
- OFMessage m = fmFailed.getData().getParsedMessage().get();
- OFFlowMod fm = (OFFlowMod) m;
- InternalCacheEntry entry =
- pendingBatches.getIfPresent(msg.getXid());
- if (entry != null) {
- entry.appendFailure(new FlowEntryBuilder(dpid, fm, driverService).build());
- } else {
- log.error("No matching batch for this error: {}", error);
- }
- } else {
- // FIXME: Potentially add flowtracking to avoid this message.
- log.error("Flow installation failed but switch didn't"
- + " tell us which one.");
- }
- }
-
- default:
- log.debug("Unhandled message type: {}", msg.getType());
- }
- }
-
- @Override
- public void receivedRoleReply(Dpid dpid, RoleState requested,
- RoleState response) {
- // Do nothing here for now.
- }
-
- private void pushFlowMetrics(Dpid dpid, OFFlowStatsReply replies) {
-
- DeviceId did = DeviceId.deviceId(Dpid.uri(dpid));
-
- List<FlowEntry> flowEntries = replies.getEntries().stream()
- .map(entry -> new FlowEntryBuilder(dpid, entry, driverService).build())
- .collect(Collectors.toList());
-
- if (adaptiveFlowSampling) {
- NewAdaptiveFlowStatsCollector afsc = afsCollectors.get(dpid);
-
- synchronized (afsc) {
- if (afsc.getFlowMissingXid() != NewAdaptiveFlowStatsCollector.NO_FLOW_MISSING_XID) {
- log.debug("OpenFlowRuleProvider:pushFlowMetrics, flowMissingXid={}, "
- + "OFFlowStatsReply Xid={}, for {}",
- afsc.getFlowMissingXid(), replies.getXid(), dpid);
- }
-
- // Check that OFFlowStatsReply Xid is same with the one of OFFlowStatsRequest?
- if (afsc.getFlowMissingXid() != NewAdaptiveFlowStatsCollector.NO_FLOW_MISSING_XID) {
- if (afsc.getFlowMissingXid() == replies.getXid()) {
- // call entire flow stats update with flowMissing synchronization.
- // used existing pushFlowMetrics
- providerService.pushFlowMetrics(did, flowEntries);
- }
- // reset flowMissingXid to NO_FLOW_MISSING_XID
- afsc.setFlowMissingXid(NewAdaptiveFlowStatsCollector.NO_FLOW_MISSING_XID);
-
- } else {
- // call individual flow stats update
- providerService.pushFlowMetricsWithoutFlowMissing(did, flowEntries);
- }
-
- // Update TypedFlowEntry to deviceFlowEntries in NewAdaptiveFlowStatsCollector
- afsc.pushFlowMetrics(flowEntries);
- }
- } else {
- // call existing entire flow stats update with flowMissing synchronization
- providerService.pushFlowMetrics(did, flowEntries);
- }
- }
-
- private void pushTableStatistics(Dpid dpid, OFTableStatsReply replies) {
-
- DeviceId did = DeviceId.deviceId(Dpid.uri(dpid));
- List<TableStatisticsEntry> tableStatsEntries = replies.getEntries().stream()
- .map(entry -> buildTableStatistics(did, entry))
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
- providerService.pushTableStatistics(did, tableStatsEntries);
- }
-
- private TableStatisticsEntry buildTableStatistics(DeviceId deviceId,
- OFTableStatsEntry ofEntry) {
- TableStatisticsEntry entry = null;
- if (ofEntry != null) {
- entry = new DefaultTableStatisticsEntry(deviceId,
- ofEntry.getTableId().getValue(),
- ofEntry.getActiveCount(),
- ofEntry.getLookupCount().getValue(),
- ofEntry.getMatchedCount().getValue());
- }
-
- return entry;
-
- }
- }
-
- /**
- * The internal cache entry holding the original request as well as
- * accumulating the any failures along the way.
- * <p/>
- * If this entry is evicted from the cache then the entire operation is
- * considered failed. Otherwise, only the failures reported by the device
- * will be propagated up.
- */
- private class InternalCacheEntry {
-
- private final FlowRuleBatchOperation operation;
- private final Set<FlowRule> failures = Sets.newConcurrentHashSet();
-
- public InternalCacheEntry(FlowRuleBatchOperation operation) {
- this.operation = operation;
- }
-
- /**
- * Appends a failed rule to the set of failed items.
- *
- * @param rule the failed rule
- */
- public void appendFailure(FlowRule rule) {
- failures.add(rule);
- }
-
- /**
- * Fails the entire batch and returns the failed operation.
- *
- * @return the failed operation
- */
- public CompletedBatchOperation failedCompletion() {
- Set<FlowRule> fails = operation.getOperations().stream()
- .map(op -> op.target()).collect(Collectors.toSet());
- return new CompletedBatchOperation(false,
- Collections
- .unmodifiableSet(fails),
- operation.deviceId());
- }
-
- /**
- * Returns the completed operation and whether the batch suceeded.
- *
- * @return the completed operation
- */
- public CompletedBatchOperation completed() {
- return new CompletedBatchOperation(
- failures.isEmpty(),
- Collections
- .unmodifiableSet(failures),
- operation.deviceId());
- }
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowValueMapper.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowValueMapper.java
deleted file mode 100644
index 556f76f5..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowValueMapper.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * 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.of.flow.impl;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.EnumHashBiMap;
-import org.onosproject.net.ChannelSpacing;
-import org.onosproject.net.GridType;
-import org.onosproject.net.OchSignalType;
-import org.onosproject.net.OduSignalType;
-
-/**
- * Collection of helper methods to convert protocol agnostic models to values used in OpenFlow spec.
- */
-final class OpenFlowValueMapper {
-
- // prohibit instantiation
- private OpenFlowValueMapper() {}
-
- private static final BiMap<GridType, Byte> GRID_TYPES = EnumHashBiMap.create(GridType.class);
- static {
- // See ONF "Optical Transport Protocol Extensions Version 1.0" for the following values
- GRID_TYPES.put(GridType.DWDM, (byte) 1); // OFPGRIDT_DWDM of enum ofp_grid_type
- GRID_TYPES.put(GridType.CWDM, (byte) 2); // OFPGRIDT_CWDM of enum ofp_grid_type
- GRID_TYPES.put(GridType.FLEX, (byte) 3); // OFPGRIDT_FLEX of enum ofp_grid_type
- }
-
- private static final BiMap<ChannelSpacing, Byte> CHANNEL_SPACING = EnumHashBiMap.create(ChannelSpacing.class);
- static {
- // See ONF "Optical Transport Protocol Extensions Version 1.0" for the following values
- CHANNEL_SPACING.put(ChannelSpacing.CHL_100GHZ, (byte) 1); // OFPCS_100GHZ of enum ofp_chl_spacing
- CHANNEL_SPACING.put(ChannelSpacing.CHL_50GHZ, (byte) 2); // OFPCS_50GHZ of enum ofp_chl_spacing
- CHANNEL_SPACING.put(ChannelSpacing.CHL_25GHZ, (byte) 3); // OFPCS_25GHZ of enum ofp_chl_spacing
- CHANNEL_SPACING.put(ChannelSpacing.CHL_12P5GHZ, (byte) 4); // OFPCS_12P5GHZ of enum ofp_chl_spacing
- CHANNEL_SPACING.put(ChannelSpacing.CHL_6P25GHZ, (byte) 5); // OFPCS_6P25GHZ of enum ofp_chl_spacing
- }
-
- private static final BiMap<OchSignalType, Byte> OCH_SIGNAL_TYPES = EnumHashBiMap.create(OchSignalType.class);
- static {
- // See ONF "Optical Transport Protocol Extensions Version 1.0" for the following values
- OCH_SIGNAL_TYPES.put(OchSignalType.FIXED_GRID, (byte) 1); // OFPOCHT_FIX_GRID of enum ofp_och_signal_type
- OCH_SIGNAL_TYPES.put(OchSignalType.FLEX_GRID, (byte) 2); // OFPOCHT_FLEX_GRID of enum ofp_och_signal_type
- }
-
- private static final BiMap<OduSignalType, Byte> ODU_SIGNAL_TYPES = EnumHashBiMap.create(OduSignalType.class);
- static {
- // See ONF "Optical Transport Protocol Extensions Version 1.0" for the following values
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU1, (byte) 1); // OFPODUT_ODU1 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU2, (byte) 2); // OFPODUT_ODU2 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU3, (byte) 3); // OFPODUT_ODU3 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU4, (byte) 4); // OFPODUT_ODU4 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU0, (byte) 10); // OFPODUT_ODU0 of enum ofp_odu_signal_type
- ODU_SIGNAL_TYPES.put(OduSignalType.ODU2e, (byte) 11); // OFPODUT_ODU2E of enum ofp_odu_signal_type
- }
-
- /**
- * Looks up the specified input value to the corresponding value with the specified map.
- *
- * @param map bidirectional mapping
- * @param input input value
- * @param cls class of output value
- * @param <I> type of input value
- * @param <O> type of output value
- * @return the corresponding value stored in the specified map
- * @throws NoMappingFoundException if no corresponding value is found
- */
- private static <I, O> O lookup(BiMap<I, O> map, I input, Class<O> cls) {
- if (!map.containsKey(input)) {
- throw new NoMappingFoundException(input, cls);
- }
-
- return map.get(input);
- }
-
- /**
- * Looks up the corresponding byte value defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0"
- * from the specified {@link GridType} instance.
- *
- * @param type grid type
- * @return the byte value corresponding to the specified grid type
- * @throws NoMappingFoundException if the specified grid type is not found
- */
- static byte lookupGridType(GridType type) {
- return lookup(GRID_TYPES, type, Byte.class);
- }
-
- /**
- * Looks up the corresponding {@link GridType} instance
- * from the specified byte value for grid type
- * defined in ONF "Optical Transport Protocol Extensions Version 1.0".
- *
- * @param type byte value as grid type defined the spec
- * @return the corresponding GridType instance
- */
- static GridType lookupGridType(byte type) {
- return lookup(GRID_TYPES.inverse(), type, GridType.class);
- }
-
- /**
- * Looks up the corresponding byte value for channel spacing defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0"
- * from the specified {@link ChannelSpacing} instance.
- *
- * @param spacing channel spacing
- * @return byte value corresponding to the specified channel spacing
- * @throws NoMappingFoundException if the specified channel spacing is not found
- */
- static byte lookupChannelSpacing(ChannelSpacing spacing) {
- return lookup(CHANNEL_SPACING, spacing, Byte.class);
- }
-
- /**
- * Looks up the corresponding {@link ChannelSpacing} instance
- * from the specified byte value for channel spacing
- * defined in ONF "Optical Transport Protocol Extensions Version 1.0".
- *
- * @param spacing byte value as channel spacing defined the spec
- * @return the corresponding ChannelSpacing instance
- * @throws NoMappingFoundException if the specified channel spacing is not found
- */
- static ChannelSpacing lookupChannelSpacing(byte spacing) {
- return lookup(CHANNEL_SPACING.inverse(), spacing, ChannelSpacing.class);
- }
-
- /**
- * Looks up the corresponding byte value for Och signal type defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0"
- * from the specified {@link OchSignalType} instance.
- *
- * @param signalType optical signal type
- * @return byte value corresponding to the specified OCh signal type
- * @throws NoMappingFoundException if the specified Och signal type is not found
- */
- static byte lookupOchSignalType(OchSignalType signalType) {
- return lookup(OCH_SIGNAL_TYPES, signalType, Byte.class);
- }
-
- /**
- * Looks up the the corresponding {@link OchSignalType} instance
- * from the specified byte value for Och signal type defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0".
- *
- * @param signalType byte value as Och singal type defined the spec
- * @return the corresponding OchSignalType instance
- * @throws NoMappingFoundException if the specified Och signal type is not found
- */
- static OchSignalType lookupOchSignalType(byte signalType) {
- return lookup(OCH_SIGNAL_TYPES.inverse(), signalType, OchSignalType.class);
- }
-
- /**
- * Looks up the corresponding byte value for ODU signal type defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0"
- * from the specified {@link OchSignalType} instance.
- *
- * @param signalType ODU (Optical channel Data Unit) signal type
- * @return byte value corresponding to the specified ODU signal type
- * @throws NoMappingFoundException if the specified ODU signal type is not found
- */
- static byte lookupOduSignalType(OduSignalType signalType) {
- return lookup(ODU_SIGNAL_TYPES, signalType, Byte.class);
- }
-
- /**
- * Looks up the the corresponding {@link OchSignalType} instance
- * from the specified byte value for ODU signal type defined in
- * ONF "Optical Transport Protocol Extensions Version 1.0".
- *
- * @param signalType byte value as ODU (Optical channel Data Unit) signal type defined the spec
- * @return the corresponding OchSignalType instance
- * @throws NoMappingFoundException if the specified ODU signal type is not found
- */
- static OduSignalType lookupOduSignalType(byte signalType) {
- return lookup(ODU_SIGNAL_TYPES.inverse(), signalType, OduSignalType.class);
- }
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/TableStatisticsCollector.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/TableStatisticsCollector.java
deleted file mode 100644
index 922a470a..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/TableStatisticsCollector.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.of.flow.impl;
-
-import org.onlab.util.SharedExecutors;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFTableStatsRequest;
-import org.slf4j.Logger;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Collects Table statistics for the specified switch.
- */
-class TableStatisticsCollector {
-
- private final Logger log = getLogger(getClass());
-
- public static final int SECONDS = 1000;
-
- private final OpenFlowSwitch sw;
- private Timer timer;
- private TimerTask task;
-
- private int pollInterval;
-
- /**
- * Creates a new table statistics collector for the given switch and poll frequency.
- *
- * @param timer timer to use for scheduling
- * @param sw switch to pull
- * @param pollInterval poll frequency in seconds
- */
- TableStatisticsCollector(Timer timer, OpenFlowSwitch sw, int pollInterval) {
- this.timer = timer;
- this.sw = sw;
- this.pollInterval = pollInterval;
- }
-
- /**
- * Adjusts poll frequency.
- *
- * @param pollInterval poll frequency in seconds
- */
- synchronized void adjustPollInterval(int pollInterval) {
- this.pollInterval = pollInterval;
- task.cancel();
- task = new InternalTimerTask();
- timer.scheduleAtFixedRate(task, pollInterval * SECONDS, pollInterval * 1000);
- }
-
- private class InternalTimerTask extends TimerTask {
- @Override
- public void run() {
- if (sw.getRole() == RoleState.MASTER) {
- log.trace("Collecting stats for {}", sw.getStringId());
- OFTableStatsRequest request = sw.factory().buildTableStatsRequest()
- .build();
- sw.sendMsg(request);
- }
- }
- }
-
- public synchronized void start() {
- // Initially start polling quickly. Then drop down to configured value
- log.debug("Starting Table Stats collection thread for {}", sw.getStringId());
- task = new InternalTimerTask();
- SharedExecutors.getTimer().scheduleAtFixedRate(task, 1 * SECONDS,
- pollInterval * SECONDS);
- }
-
- public synchronized void stop() {
- log.debug("Stopping Table Stats collection thread for {}", sw.getStringId());
- task.cancel();
- task = null;
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/package-info.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/package-info.java
deleted file mode 100644
index 2acc1510..00000000
--- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/package-info.java
+++ /dev/null
@@ -1,20 +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.
- */
-
-/**
- * Provider that uses OpenFlow controller as a means of ending and receiving flow information.
- */
-package org.onosproject.provider.of.flow.impl;
diff --git a/framework/src/onos/providers/openflow/group/pom.xml b/framework/src/onos/providers/openflow/group/pom.xml
deleted file mode 100644
index c63a016d..00000000
--- a/framework/src/onos/providers/openflow/group/pom.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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.
- -->
-<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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-of-provider-group</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS OpenFlow protocol group provider</description>
-
-</project> \ No newline at end of file
diff --git a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupBucketEntryBuilder.java b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupBucketEntryBuilder.java
deleted file mode 100644
index d3a23782..00000000
--- a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupBucketEntryBuilder.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * 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.of.group.impl;
-
-import com.google.common.collect.Lists;
-
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.MplsLabel;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.core.GroupId;
-import org.onosproject.net.Lambda;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.group.DefaultGroupBucket;
-import org.onosproject.net.group.GroupBucket;
-import org.onosproject.net.group.GroupBuckets;
-import org.projectfloodlight.openflow.protocol.OFBucket;
-import org.projectfloodlight.openflow.protocol.OFGroupType;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
-import org.projectfloodlight.openflow.protocol.action.OFActionCircuit;
-import org.projectfloodlight.openflow.protocol.action.OFActionCopyTtlIn;
-import org.projectfloodlight.openflow.protocol.action.OFActionCopyTtlOut;
-import org.projectfloodlight.openflow.protocol.action.OFActionDecMplsTtl;
-import org.projectfloodlight.openflow.protocol.action.OFActionDecNwTtl;
-import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter;
-import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
-import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
-import org.projectfloodlight.openflow.protocol.action.OFActionPopMpls;
-import org.projectfloodlight.openflow.protocol.action.OFActionPushMpls;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetDlDst;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetDlSrc;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetField;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetNwDst;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetNwSrc;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetVlanPcp;
-import org.projectfloodlight.openflow.protocol.action.OFActionSetVlanVid;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxmOchSigidBasic;
-import org.projectfloodlight.openflow.types.IPv4Address;
-import org.projectfloodlight.openflow.types.OFVlanVidMatch;
-import org.projectfloodlight.openflow.types.U32;
-import org.projectfloodlight.openflow.types.U8;
-import org.projectfloodlight.openflow.types.VlanPcp;
-import org.slf4j.Logger;
-
-import java.util.List;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/*
- * Builder for GroupBucketEntry.
- */
-public class GroupBucketEntryBuilder {
-
- private List<OFBucket> ofBuckets;
- private OFGroupType type;
-
- private final Logger log = getLogger(getClass());
-
- /**
- * Creates a builder.
- *
- * @param ofBuckets list of OFBucket
- * @param type Group type
- */
- public GroupBucketEntryBuilder(List<OFBucket> ofBuckets, OFGroupType type) {
- this.ofBuckets = ofBuckets;
- this.type = type;
- }
-
- /**
- * Builds a GroupBuckets.
- *
- * @return GroupBuckets object, a list of GroupBuckets
- */
- public GroupBuckets build() {
- List<GroupBucket> bucketList = Lists.newArrayList();
-
- for (OFBucket bucket: ofBuckets) {
- TrafficTreatment treatment = buildTreatment(bucket.getActions());
- // TODO: Use GroupBucketEntry
- GroupBucket groupBucket = null;
- switch (type) {
- case INDIRECT:
- groupBucket =
- DefaultGroupBucket.createIndirectGroupBucket(treatment);
- break;
- case SELECT:
- groupBucket =
- DefaultGroupBucket.createSelectGroupBucket(treatment);
- break;
- case FF:
- PortNumber port =
- PortNumber.portNumber(bucket.getWatchPort().getPortNumber());
- GroupId groupId =
- new DefaultGroupId(bucket.getWatchGroup().getGroupNumber());
- groupBucket =
- DefaultGroupBucket.createFailoverGroupBucket(treatment,
- port, groupId);
- break;
- case ALL:
- groupBucket =
- DefaultGroupBucket.createAllGroupBucket(treatment);
- break;
- default:
- log.error("Unsupported Group type : {}", type);
- }
- if (groupBucket != null) {
- bucketList.add(groupBucket);
- }
- }
- return new GroupBuckets(bucketList);
- }
-
-
- private TrafficTreatment buildTreatment(List<OFAction> actions) {
- TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
- // If this is a drop rule
- if (actions.size() == 0) {
- builder.drop();
- return builder.build();
- }
- for (OFAction act : actions) {
- switch (act.getType()) {
- case OUTPUT:
- OFActionOutput out = (OFActionOutput) act;
- builder.setOutput(
- PortNumber.portNumber(out.getPort().getPortNumber()));
- break;
- case SET_VLAN_VID:
- OFActionSetVlanVid vlan = (OFActionSetVlanVid) act;
- builder.setVlanId(VlanId.vlanId(vlan.getVlanVid().getVlan()));
- break;
- case SET_VLAN_PCP:
- OFActionSetVlanPcp pcp = (OFActionSetVlanPcp) act;
- builder.setVlanPcp(pcp.getVlanPcp().getValue());
- break;
- case POP_VLAN:
- builder.popVlan();
- break;
- case PUSH_VLAN:
- builder.pushVlan();
- break;
- case SET_DL_DST:
- OFActionSetDlDst dldst = (OFActionSetDlDst) act;
- builder.setEthDst(
- MacAddress.valueOf(dldst.getDlAddr().getLong()));
- break;
- case SET_DL_SRC:
- OFActionSetDlSrc dlsrc = (OFActionSetDlSrc) act;
- builder.setEthSrc(
- MacAddress.valueOf(dlsrc.getDlAddr().getLong()));
-
- break;
- case SET_NW_DST:
- OFActionSetNwDst nwdst = (OFActionSetNwDst) act;
- IPv4Address di = nwdst.getNwAddr();
- builder.setIpDst(Ip4Address.valueOf(di.getInt()));
- break;
- case SET_NW_SRC:
- OFActionSetNwSrc nwsrc = (OFActionSetNwSrc) act;
- IPv4Address si = nwsrc.getNwAddr();
- builder.setIpSrc(Ip4Address.valueOf(si.getInt()));
- break;
- case EXPERIMENTER:
- OFActionExperimenter exp = (OFActionExperimenter) act;
- if (exp.getExperimenter() == 0x80005A06 ||
- exp.getExperimenter() == 0x748771) {
- OFActionCircuit ct = (OFActionCircuit) exp;
- short lambda = ((OFOxmOchSigidBasic) ct.getField()).getValue().getChannelNumber();
- builder.add(Instructions.modL0Lambda(Lambda.indexedLambda(lambda)));
- } else {
- log.warn("Unsupported OFActionExperimenter {}", exp.getExperimenter());
- }
- break;
- case SET_FIELD:
- OFActionSetField setField = (OFActionSetField) act;
- handleSetField(builder, setField.getField());
- break;
- case POP_MPLS:
- OFActionPopMpls popMpls = (OFActionPopMpls) act;
- builder.popMpls((short) popMpls.getEthertype().getValue());
- break;
- case PUSH_MPLS:
- OFActionPushMpls pushMpls = (OFActionPushMpls) act;
- builder.pushMpls();
- break;
- case COPY_TTL_IN:
- OFActionCopyTtlIn copyTtlIn = (OFActionCopyTtlIn) act;
- builder.copyTtlIn();
- break;
- case COPY_TTL_OUT:
- OFActionCopyTtlOut copyTtlOut = (OFActionCopyTtlOut) act;
- builder.copyTtlOut();
- break;
- case DEC_MPLS_TTL:
- OFActionDecMplsTtl decMplsTtl = (OFActionDecMplsTtl) act;
- builder.decMplsTtl();
- break;
- case DEC_NW_TTL:
- OFActionDecNwTtl decNwTtl = (OFActionDecNwTtl) act;
- builder.decNwTtl();
- break;
- case GROUP:
- OFActionGroup grp = (OFActionGroup) act;
- builder.group(new DefaultGroupId(grp.getGroup().getGroupNumber()));
- break;
- case SET_TP_DST:
- case SET_TP_SRC:
- case POP_PBB:
- case PUSH_PBB:
- case SET_MPLS_LABEL:
- case SET_MPLS_TC:
- case SET_MPLS_TTL:
- case SET_NW_ECN:
- case SET_NW_TOS:
- case SET_NW_TTL:
- case SET_QUEUE:
- case STRIP_VLAN:
- case ENQUEUE:
- default:
- log.warn("Action type {} not yet implemented.", act.getType());
- }
- }
-
- return builder.build();
- }
-
- private void handleSetField(TrafficTreatment.Builder builder, OFOxm<?> oxm) {
- switch (oxm.getMatchField().id) {
- case VLAN_PCP:
- @SuppressWarnings("unchecked")
- OFOxm<VlanPcp> vlanpcp = (OFOxm<VlanPcp>) oxm;
- builder.setVlanPcp(vlanpcp.getValue().getValue());
- break;
- case VLAN_VID:
- @SuppressWarnings("unchecked")
- OFOxm<OFVlanVidMatch> vlanvid = (OFOxm<OFVlanVidMatch>) oxm;
- builder.setVlanId(VlanId.vlanId(vlanvid.getValue().getVlan()));
- break;
- case ETH_DST:
- @SuppressWarnings("unchecked")
- OFOxm<org.projectfloodlight.openflow.types.MacAddress> ethdst =
- (OFOxm<org.projectfloodlight.openflow.types.MacAddress>) oxm;
- builder.setEthDst(MacAddress.valueOf(ethdst.getValue().getLong()));
- break;
- case ETH_SRC:
- @SuppressWarnings("unchecked")
- OFOxm<org.projectfloodlight.openflow.types.MacAddress> ethsrc =
- (OFOxm<org.projectfloodlight.openflow.types.MacAddress>) oxm;
- builder.setEthSrc(MacAddress.valueOf(ethsrc.getValue().getLong()));
- break;
- case IPV4_DST:
- @SuppressWarnings("unchecked")
- OFOxm<IPv4Address> ip4dst = (OFOxm<IPv4Address>) oxm;
- builder.setIpDst(Ip4Address.valueOf(ip4dst.getValue().getInt()));
- break;
- case IPV4_SRC:
- @SuppressWarnings("unchecked")
- OFOxm<IPv4Address> ip4src = (OFOxm<IPv4Address>) oxm;
- builder.setIpSrc(Ip4Address.valueOf(ip4src.getValue().getInt()));
- break;
- case MPLS_LABEL:
- @SuppressWarnings("unchecked")
- OFOxm<U32> labelId = (OFOxm<U32>) oxm;
- builder.setMpls(MplsLabel.mplsLabel((int) labelId.getValue().getValue()));
- break;
- case MPLS_BOS:
- @SuppressWarnings("unchecked")
- OFOxm<U8> mplsBos = (OFOxm<U8>) oxm;
- builder.setMplsBos(mplsBos.getValue() == U8.ZERO ? false : true);
- break;
- case ARP_OP:
- case ARP_SHA:
- case ARP_SPA:
- case ARP_THA:
- case ARP_TPA:
- case BSN_EGR_PORT_GROUP_ID:
- case BSN_GLOBAL_VRF_ALLOWED:
- case BSN_IN_PORTS_128:
- case BSN_L3_DST_CLASS_ID:
- case BSN_L3_INTERFACE_CLASS_ID:
- case BSN_L3_SRC_CLASS_ID:
- case BSN_LAG_ID:
- case BSN_TCP_FLAGS:
- case BSN_UDF0:
- case BSN_UDF1:
- case BSN_UDF2:
- case BSN_UDF3:
- case BSN_UDF4:
- case BSN_UDF5:
- case BSN_UDF6:
- case BSN_UDF7:
- case BSN_VLAN_XLATE_PORT_GROUP_ID:
- case BSN_VRF:
- case ETH_TYPE:
- case ICMPV4_CODE:
- case ICMPV4_TYPE:
- case ICMPV6_CODE:
- case ICMPV6_TYPE:
- case IN_PHY_PORT:
- case IN_PORT:
- case IPV6_DST:
- case IPV6_FLABEL:
- case IPV6_ND_SLL:
- case IPV6_ND_TARGET:
- case IPV6_ND_TLL:
- case IPV6_SRC:
- case IP_DSCP:
- case IP_ECN:
- case IP_PROTO:
- case METADATA:
- case MPLS_TC:
- case OCH_SIGID:
- case OCH_SIGID_BASIC:
- case OCH_SIGTYPE:
- case OCH_SIGTYPE_BASIC:
- case SCTP_DST:
- case SCTP_SRC:
- case TCP_DST:
- case TCP_SRC:
- case TUNNEL_ID:
- case UDP_DST:
- case UDP_SRC:
- default:
- log.warn("Set field type {} not yet implemented.", oxm.getMatchField().id);
- break;
- }
- }
-}
diff --git a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java
deleted file mode 100644
index 9c93844a..00000000
--- a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupModBuilder.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * 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.of.group.impl;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
-
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.Ip6Address;
-import org.onosproject.core.GroupId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.driver.DefaultDriverData;
-import org.onosproject.net.driver.DefaultDriverHandler;
-import org.onosproject.net.driver.Driver;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.ExtensionTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.flow.instructions.L0ModificationInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction;
-import org.onosproject.net.flow.instructions.L3ModificationInstruction;
-import org.onosproject.net.group.GroupBucket;
-import org.onosproject.net.group.GroupBuckets;
-import org.onosproject.net.group.GroupDescription;
-import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter;
-import org.projectfloodlight.openflow.protocol.OFBucket;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFGroupAdd;
-import org.projectfloodlight.openflow.protocol.OFGroupDelete;
-import org.projectfloodlight.openflow.protocol.OFGroupMod;
-import org.projectfloodlight.openflow.protocol.OFGroupType;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
-import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
-import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
-import org.projectfloodlight.openflow.types.CircuitSignalID;
-import org.projectfloodlight.openflow.types.EthType;
-import org.projectfloodlight.openflow.types.IPv4Address;
-import org.projectfloodlight.openflow.types.IPv6Address;
-import org.projectfloodlight.openflow.types.IPv6FlowLabel;
-import org.projectfloodlight.openflow.types.MacAddress;
-import org.projectfloodlight.openflow.types.OFBooleanValue;
-import org.projectfloodlight.openflow.types.OFGroup;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.OFVlanVidMatch;
-import org.projectfloodlight.openflow.types.U32;
-import org.projectfloodlight.openflow.types.VlanPcp;
-import org.slf4j.Logger;
-
-/*
- * Builder for GroupMod.
- */
-public final class GroupModBuilder {
-
- private GroupBuckets buckets;
- private GroupId groupId;
- private GroupDescription.Type type;
- private OFFactory factory;
- private Long xid;
- private Optional<DriverService> driverService;
-
- private final Logger log = getLogger(getClass());
-
- private static final int OFPCML_NO_BUFFER = 0xffff;
-
- private GroupModBuilder(GroupBuckets buckets, GroupId groupId,
- GroupDescription.Type type, OFFactory factory,
- Optional<Long> xid) {
- this.buckets = buckets;
- this.groupId = groupId;
- this.type = type;
- this.factory = factory;
- this.xid = xid.orElse((long) 0);
- }
-
- private GroupModBuilder(GroupBuckets buckets, GroupId groupId,
- GroupDescription.Type type, OFFactory factory,
- Optional<Long> xid, Optional<DriverService> driverService) {
- this.buckets = buckets;
- this.groupId = groupId;
- this.type = type;
- this.factory = factory;
- this.xid = xid.orElse((long) 0);
- this.driverService = driverService;
- }
- /**
- * Creates a builder for GroupMod.
- *
- * @param buckets GroupBuckets object
- * @param groupId Group Id to create
- * @param type Group type
- * @param factory OFFactory object
- * @param xid transaction ID
- * @return GroupModBuilder object
- */
- public static GroupModBuilder builder(GroupBuckets buckets, GroupId groupId,
- GroupDescription.Type type, OFFactory factory,
- Optional<Long> xid) {
-
- return new GroupModBuilder(buckets, groupId, type, factory, xid);
- }
-
- /**
- * Creates a builder for GroupMod.
- *
- * @param buckets GroupBuckets object
- * @param groupId Group Id to create
- * @param type Group type
- * @param factory OFFactory object
- * @param xid transaction ID
- * @param driverService driver Service
- * @return GroupModBuilder object
- */
- public static GroupModBuilder builder(GroupBuckets buckets, GroupId groupId,
- GroupDescription.Type type, OFFactory factory,
- Optional<Long> xid, Optional<DriverService> driverService) {
-
- return new GroupModBuilder(buckets, groupId, type, factory, xid, driverService);
- }
-
- /**
- * Builds the GroupAdd OF message.
- *
- * @return GroupAdd OF message
- */
- public OFGroupAdd buildGroupAdd() {
-
- List<OFBucket> ofBuckets = new ArrayList<OFBucket>();
- for (GroupBucket bucket: buckets.buckets()) {
- List<OFAction> actions = buildActions(bucket.treatment());
-
- OFBucket.Builder bucketBuilder = factory.buildBucket();
- bucketBuilder.setActions(actions);
- if (type == GroupDescription.Type.SELECT) {
- bucketBuilder.setWeight(1);
- }
-
- if (type == GroupDescription.Type.FAILOVER && bucket.watchPort() != null) {
- bucketBuilder.setWatchPort(OFPort.of((int) bucket.watchPort().toLong()));
- } else {
- bucketBuilder.setWatchPort(OFPort.ANY);
- }
- if (type == GroupDescription.Type.FAILOVER && bucket.watchGroup() != null) {
- bucketBuilder.setWatchGroup(OFGroup.of(bucket.watchGroup().id()));
- } else {
- bucketBuilder.setWatchGroup(OFGroup.ANY);
- }
- OFBucket ofBucket = bucketBuilder.build();
- ofBuckets.add(ofBucket);
- }
-
- OFGroupAdd groupMsg = factory.buildGroupAdd()
- .setGroup(OFGroup.of(groupId.id()))
- .setBuckets(ofBuckets)
- .setGroupType(getOFGroupType(type))
- .setXid(xid)
- .build();
-
- return groupMsg;
- }
-
- /**
- * Builds the GroupMod OF message.
- *
- * @return GroupMod OF message
- */
- public OFGroupMod buildGroupMod() {
- List<OFBucket> ofBuckets = new ArrayList<OFBucket>();
- for (GroupBucket bucket: buckets.buckets()) {
- List<OFAction> actions = buildActions(bucket.treatment());
-
- OFBucket.Builder bucketBuilder = factory.buildBucket();
- bucketBuilder.setActions(actions);
- if (type == GroupDescription.Type.SELECT) {
- bucketBuilder.setWeight(1);
- }
- bucketBuilder.setWatchGroup(OFGroup.ANY);
- bucketBuilder.setWatchPort(OFPort.ANY);
- OFBucket ofBucket = bucketBuilder.build();
- ofBuckets.add(ofBucket);
- }
-
- OFGroupMod groupMsg = factory.buildGroupModify()
- .setGroup(OFGroup.of(groupId.id()))
- .setBuckets(ofBuckets)
- .setGroupType(getOFGroupType(type))
- .setXid(xid)
- .build();
-
- return groupMsg;
- }
-
- /**
- * Builds the GroupDel OF message.
- *
- * @return GroupDel OF message
- */
- public OFGroupDelete buildGroupDel() {
-
- OFGroupDelete groupMsg = factory.buildGroupDelete()
- .setGroup(OFGroup.of(groupId.id()))
- .setGroupType(OFGroupType.SELECT)
- .setXid(xid)
- .build();
-
- return groupMsg;
- }
-
- private List<OFAction> buildActions(TrafficTreatment treatment) {
- if (treatment == null) {
- return Collections.emptyList();
- }
-
- List<OFAction> actions = new LinkedList<>();
- for (Instruction i : treatment.allInstructions()) {
- switch (i.type()) {
- case DROP:
- log.warn("Saw drop action; assigning drop action");
- return Collections.emptyList();
- case L0MODIFICATION:
- actions.add(buildL0Modification(i));
- break;
- case L2MODIFICATION:
- actions.add(buildL2Modification(i));
- break;
- case L3MODIFICATION:
- actions.add(buildL3Modification(i));
- break;
- case OUTPUT:
- Instructions.OutputInstruction out =
- (Instructions.OutputInstruction) i;
- OFActionOutput.Builder action = factory.actions().buildOutput()
- .setPort(OFPort.of((int) out.port().toLong()));
- if (out.port().equals(PortNumber.CONTROLLER)) {
- action.setMaxLen(OFPCML_NO_BUFFER);
- }
- actions.add(action.build());
- break;
- case GROUP:
- Instructions.GroupInstruction grp =
- (Instructions.GroupInstruction) i;
- OFActionGroup.Builder actgrp = factory.actions().buildGroup()
- .setGroup(OFGroup.of(grp.groupId().id()));
- actions.add(actgrp.build());
- break;
- case EXTENSION:
- Instructions.ExtensionInstructionWrapper wrapper =
- (Instructions.ExtensionInstructionWrapper) i;
- actions.add(buildExtensionAction(
- wrapper.extensionInstruction(), wrapper.deviceId()));
- break;
- default:
- log.warn("Instruction type {} not yet implemented.", i.type());
- }
- }
-
- return actions;
- }
-
- private OFAction buildL0Modification(Instruction i) {
- L0ModificationInstruction l0m = (L0ModificationInstruction) i;
- switch (l0m.subtype()) {
- case LAMBDA:
- L0ModificationInstruction.ModLambdaInstruction ml =
- (L0ModificationInstruction.ModLambdaInstruction) i;
- return factory.actions().circuit(factory.oxms().ochSigidBasic(
- new CircuitSignalID((byte) 1, (byte) 2, ml.lambda(), (short) 1)));
- default:
- log.warn("Unimplemented action type {}.", l0m.subtype());
- break;
- }
- return null;
- }
-
- private OFAction buildL2Modification(Instruction i) {
- L2ModificationInstruction l2m = (L2ModificationInstruction) i;
- L2ModificationInstruction.ModEtherInstruction eth;
- OFOxm<?> oxm = null;
- switch (l2m.subtype()) {
- case ETH_DST:
- eth = (L2ModificationInstruction.ModEtherInstruction) l2m;
- oxm = factory.oxms().ethDst(MacAddress.of(eth.mac().toLong()));
- break;
- case ETH_SRC:
- eth = (L2ModificationInstruction.ModEtherInstruction) l2m;
- oxm = factory.oxms().ethSrc(MacAddress.of(eth.mac().toLong()));
- break;
- case VLAN_ID:
- L2ModificationInstruction.ModVlanIdInstruction vlanId =
- (L2ModificationInstruction.ModVlanIdInstruction) l2m;
- oxm = factory.oxms().vlanVid(OFVlanVidMatch.ofVlan(vlanId.vlanId().toShort()));
- break;
- case VLAN_PCP:
- L2ModificationInstruction.ModVlanPcpInstruction vlanPcp =
- (L2ModificationInstruction.ModVlanPcpInstruction) l2m;
- oxm = factory.oxms().vlanPcp(VlanPcp.of(vlanPcp.vlanPcp()));
- break;
- case VLAN_POP:
- return factory.actions().popVlan();
- case VLAN_PUSH:
- L2ModificationInstruction.PushHeaderInstructions pushVlanInstruction
- = (L2ModificationInstruction.PushHeaderInstructions) l2m;
- return factory.actions().pushVlan(
- EthType.of(pushVlanInstruction.ethernetType().toShort()));
- case MPLS_PUSH:
- L2ModificationInstruction.PushHeaderInstructions pushHeaderInstructions =
- (L2ModificationInstruction.PushHeaderInstructions) l2m;
- return factory.actions().pushMpls(EthType.of(pushHeaderInstructions
- .ethernetType().toShort()));
- case MPLS_POP:
- L2ModificationInstruction.PushHeaderInstructions popHeaderInstructions =
- (L2ModificationInstruction.PushHeaderInstructions) l2m;
- return factory.actions().popMpls(EthType.of(popHeaderInstructions
- .ethernetType().toShort()));
- case MPLS_LABEL:
- L2ModificationInstruction.ModMplsLabelInstruction mplsLabel =
- (L2ModificationInstruction.ModMplsLabelInstruction) l2m;
- oxm = factory.oxms().mplsLabel(U32.of(mplsLabel.mplsLabel().toInt()));
- break;
- case MPLS_BOS:
- L2ModificationInstruction.ModMplsBosInstruction mplsBos =
- (L2ModificationInstruction.ModMplsBosInstruction) l2m;
- oxm = factory.oxms()
- .mplsBos(mplsBos.mplsBos() ? OFBooleanValue.TRUE
- : OFBooleanValue.FALSE);
- break;
- case DEC_MPLS_TTL:
- return factory.actions().decMplsTtl();
- default:
- log.warn("Unimplemented action type {}.", l2m.subtype());
- break;
- }
-
- if (oxm != null) {
- return factory.actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFAction buildL3Modification(Instruction i) {
- L3ModificationInstruction l3m = (L3ModificationInstruction) i;
- L3ModificationInstruction.ModIPInstruction ip;
- Ip4Address ip4;
- Ip6Address ip6;
- OFOxm<?> oxm = null;
- switch (l3m.subtype()) {
- case IPV4_SRC:
- ip = (L3ModificationInstruction.ModIPInstruction) i;
- ip4 = ip.ip().getIp4Address();
- oxm = factory.oxms().ipv4Src(IPv4Address.of(ip4.toInt()));
- break;
- case IPV4_DST:
- ip = (L3ModificationInstruction.ModIPInstruction) i;
- ip4 = ip.ip().getIp4Address();
- oxm = factory.oxms().ipv4Dst(IPv4Address.of(ip4.toInt()));
- break;
- case IPV6_SRC:
- ip = (L3ModificationInstruction.ModIPInstruction) i;
- ip6 = ip.ip().getIp6Address();
- oxm = factory.oxms().ipv6Src(IPv6Address.of(ip6.toOctets()));
- break;
- case IPV6_DST:
- ip = (L3ModificationInstruction.ModIPInstruction) i;
- ip6 = ip.ip().getIp6Address();
- oxm = factory.oxms().ipv6Dst(IPv6Address.of(ip6.toOctets()));
- break;
- case IPV6_FLABEL:
- L3ModificationInstruction.ModIPv6FlowLabelInstruction flowLabelInstruction =
- (L3ModificationInstruction.ModIPv6FlowLabelInstruction) i;
- int flowLabel = flowLabelInstruction.flowLabel();
- oxm = factory.oxms().ipv6Flabel(IPv6FlowLabel.of(flowLabel));
- break;
- case DEC_TTL:
- return factory.actions().decNwTtl();
- case TTL_IN:
- return factory.actions().copyTtlIn();
- case TTL_OUT:
- return factory.actions().copyTtlOut();
- default:
- log.warn("Unimplemented action type {}.", l3m.subtype());
- break;
- }
-
- if (oxm != null) {
- return factory.actions().buildSetField().setField(oxm).build();
- }
- return null;
- }
-
- private OFGroupType getOFGroupType(GroupDescription.Type groupType) {
- switch (groupType) {
- case INDIRECT:
- return OFGroupType.INDIRECT;
- case SELECT:
- return OFGroupType.SELECT;
- case FAILOVER:
- return OFGroupType.FF;
- case ALL:
- return OFGroupType.ALL;
- default:
- log.error("Unsupported group type : {}", groupType);
- break;
- }
- return null;
- }
-
- private OFAction buildExtensionAction(ExtensionTreatment i, DeviceId deviceId) {
- if (!driverService.isPresent()) {
- log.error("No driver service present");
- return null;
- }
- Driver driver = driverService.get().getDriver(deviceId);
- if (driver.hasBehaviour(ExtensionTreatmentInterpreter.class)) {
- DefaultDriverHandler handler =
- new DefaultDriverHandler(new DefaultDriverData(driver, deviceId));
- ExtensionTreatmentInterpreter interpreter = handler.behaviour(ExtensionTreatmentInterpreter.class);
- return interpreter.mapInstruction(factory, i);
- }
-
- return null;
- }
-}
-
diff --git a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
deleted file mode 100644
index 9816426b..00000000
--- a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * 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.of.group.impl;
-
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.util.Timer;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFGroupDescStatsRequest;
-import org.projectfloodlight.openflow.protocol.OFGroupStatsRequest;
-import org.projectfloodlight.openflow.types.OFGroup;
-import org.slf4j.Logger;
-
-import java.util.concurrent.TimeUnit;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/*
- * Sends Group Stats Request and collect the group statistics with a time interval.
- */
-public class GroupStatsCollector implements TimerTask {
-
- private final HashedWheelTimer timer = Timer.getTimer();
- private final OpenFlowSwitch sw;
- private final Logger log = getLogger(getClass());
- private final int refreshInterval;
-
- private Timeout timeout;
-
- private boolean stopTimer = false;
-
- /**
- * Creates a GroupStatsCollector object.
- *
- * @param sw Open Flow switch
- * @param interval time interval for collecting group statistic
- */
- public GroupStatsCollector(OpenFlowSwitch sw, int interval) {
- this.sw = sw;
- this.refreshInterval = interval;
- }
-
- @Override
- public void run(Timeout timeout) throws Exception {
- log.trace("Collecting stats for {}", sw.getStringId());
-
- sendGroupStatistic();
-
- if (!this.stopTimer) {
- log.trace("Scheduling stats collection in {} seconds for {}",
- this.refreshInterval, this.sw.getStringId());
- timeout.getTimer().newTimeout(this, refreshInterval,
- TimeUnit.SECONDS);
- }
- }
-
- private void sendGroupStatistic() {
- if (log.isTraceEnabled()) {
- log.trace("sendGroupStatistics {}:{}", sw.getStringId(), sw.getRole());
- }
- if (sw.getRole() != RoleState.MASTER) {
- return;
- }
- Long statsXid = OpenFlowGroupProvider.getXidAndAdd(2);
- OFGroupStatsRequest statsRequest = sw.factory().buildGroupStatsRequest()
- .setGroup(OFGroup.ALL)
- .setXid(statsXid)
- .build();
- sw.sendMsg(statsRequest);
-
- Long descXid = statsXid + 1;
- OFGroupDescStatsRequest descStatsRequest =
- sw.factory().buildGroupDescStatsRequest()
- .setXid(descXid)
- .build();
- sw.sendMsg(descStatsRequest);
- }
-
- /**
- * Starts the collector.
- */
- public void start() {
- log.info("Starting Group Stats collection thread for {}", sw.getStringId());
- timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
- }
-
- /**
- * Stops the collector.
- */
- public void stop() {
- log.info("Stopping Group Stats collection thread for {}", sw.getStringId());
- this.stopTimer = true;
- timeout.cancel();
- }
-}
diff --git a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
deleted file mode 100644
index 6c646d0d..00000000
--- a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * 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.of.group.impl;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicLong;
-
-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.onosproject.core.DefaultGroupId;
-import org.onosproject.core.GroupId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.group.DefaultGroup;
-import org.onosproject.net.group.Group;
-import org.onosproject.net.group.GroupBuckets;
-import org.onosproject.net.group.GroupDescription;
-import org.onosproject.net.group.GroupOperation;
-import org.onosproject.net.group.GroupOperations;
-import org.onosproject.net.group.GroupProvider;
-import org.onosproject.net.group.GroupProviderRegistry;
-import org.onosproject.net.group.GroupProviderService;
-import org.onosproject.net.group.StoredGroupBucketEntry;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFBucketCounter;
-import org.projectfloodlight.openflow.protocol.OFErrorMsg;
-import org.projectfloodlight.openflow.protocol.OFErrorType;
-import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
-import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
-import org.projectfloodlight.openflow.protocol.OFGroupMod;
-import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
-import org.projectfloodlight.openflow.protocol.OFGroupStatsReply;
-import org.projectfloodlight.openflow.protocol.OFGroupType;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFPortStatus;
-import org.projectfloodlight.openflow.protocol.OFStatsReply;
-import org.projectfloodlight.openflow.protocol.OFStatsType;
-import org.projectfloodlight.openflow.protocol.OFVersion;
-import org.slf4j.Logger;
-
-import com.google.common.collect.Maps;
-
-/**
- * Provider which uses an OpenFlow controller to handle Group.
- */
-@Component(immediate = true)
-public class OpenFlowGroupProvider extends AbstractProvider implements GroupProvider {
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OpenFlowController controller;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected GroupProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DriverService driverService;
-
- private GroupProviderService providerService;
-
- static final int POLL_INTERVAL = 10;
-
- private final InternalGroupProvider listener = new InternalGroupProvider();
-
- private static final AtomicLong XID_COUNTER = new AtomicLong(1);
- private final Map<Dpid, GroupStatsCollector> collectors = Maps.newHashMap();
- private final Map<Long, OFStatsReply> groupStats = Maps.newConcurrentMap();
- private final Map<GroupId, GroupOperation> pendingGroupOperations =
- Maps.newConcurrentMap();
-
- /* Map<Group ID, Transaction ID> */
- private final Map<GroupId, Long> pendingXidMaps = Maps.newConcurrentMap();
-
- /**
- * Creates a OpenFlow group provider.
- */
- public OpenFlowGroupProvider() {
- super(new ProviderId("of", "org.onosproject.provider.group"));
- }
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- controller.addListener(listener);
- controller.addEventListener(listener);
-
- for (OpenFlowSwitch sw : controller.getSwitches()) {
- if (isGroupSupported(sw)) {
- GroupStatsCollector gsc = new GroupStatsCollector(sw, POLL_INTERVAL);
- gsc.start();
- collectors.put(new Dpid(sw.getId()), gsc);
- }
- }
-
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- providerService = null;
- collectors.values().forEach(GroupStatsCollector::stop);
- collectors.clear();
- log.info("Stopped");
- }
-
- @Override
- public void performGroupOperation(DeviceId deviceId, GroupOperations groupOps) {
- Map<OFGroupMod, OpenFlowSwitch> mods = Maps.newIdentityHashMap();
- final Dpid dpid = Dpid.dpid(deviceId.uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- for (GroupOperation groupOperation: groupOps.operations()) {
- if (sw == null) {
- log.error("SW {} is not found", dpid);
- return;
- }
- final Long groupModXid = XID_COUNTER.getAndIncrement();
- GroupModBuilder builder = null;
- if (driverService == null) {
- builder = GroupModBuilder.builder(groupOperation.buckets(),
- groupOperation.groupId(),
- groupOperation.groupType(),
- sw.factory(),
- Optional.of(groupModXid));
- } else {
- builder = GroupModBuilder.builder(groupOperation.buckets(),
- groupOperation.groupId(),
- groupOperation.groupType(),
- sw.factory(),
- Optional.of(groupModXid),
- Optional.of(driverService));
- }
- OFGroupMod groupMod = null;
- switch (groupOperation.opType()) {
- case ADD:
- groupMod = builder.buildGroupAdd();
- break;
- case MODIFY:
- groupMod = builder.buildGroupMod();
- break;
- case DELETE:
- groupMod = builder.buildGroupDel();
- break;
- default:
- log.error("Unsupported Group operation");
- return;
- }
- sw.sendMsg(groupMod);
- GroupId groudId = new DefaultGroupId(groupMod.getGroup().getGroupNumber());
- pendingGroupOperations.put(groudId, groupOperation);
- pendingXidMaps.put(groudId, groupModXid);
- }
- }
-
- private void pushGroupMetrics(Dpid dpid, OFStatsReply statsReply) {
- DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid));
-
- OFGroupStatsReply groupStatsReply = null;
- OFGroupDescStatsReply groupDescStatsReply = null;
-
- synchronized (groupStats) {
- if (statsReply.getStatsType() == OFStatsType.GROUP) {
- OFStatsReply reply = groupStats.get(statsReply.getXid() + 1);
- if (reply != null) {
- groupStatsReply = (OFGroupStatsReply) statsReply;
- groupDescStatsReply = (OFGroupDescStatsReply) reply;
- groupStats.remove(statsReply.getXid() + 1);
- } else {
- groupStats.put(statsReply.getXid(), statsReply);
- }
- } else if (statsReply.getStatsType() == OFStatsType.GROUP_DESC) {
- OFStatsReply reply = groupStats.get(statsReply.getXid() - 1);
- if (reply != null) {
- groupStatsReply = (OFGroupStatsReply) reply;
- groupDescStatsReply = (OFGroupDescStatsReply) statsReply;
- groupStats.remove(statsReply.getXid() - 1);
- } else {
- groupStats.put(statsReply.getXid(), statsReply);
- }
- }
- }
-
- if (groupStatsReply != null && groupDescStatsReply != null) {
- Collection<Group> groups = buildGroupMetrics(deviceId,
- groupStatsReply, groupDescStatsReply);
- providerService.pushGroupMetrics(deviceId, groups);
- for (Group group: groups) {
- pendingGroupOperations.remove(group.id());
- pendingXidMaps.remove(group.id());
- }
- }
- }
-
- private Collection<Group> buildGroupMetrics(DeviceId deviceId,
- OFGroupStatsReply groupStatsReply,
- OFGroupDescStatsReply groupDescStatsReply) {
-
- Map<Integer, Group> groups = Maps.newHashMap();
-
-
- for (OFGroupDescStatsEntry entry: groupDescStatsReply.getEntries()) {
- int id = entry.getGroup().getGroupNumber();
- GroupId groupId = new DefaultGroupId(id);
- GroupDescription.Type type = getGroupType(entry.getGroupType());
- GroupBuckets buckets = new GroupBucketEntryBuilder(entry.getBuckets(),
- entry.getGroupType()).build();
- DefaultGroup group = new DefaultGroup(groupId, deviceId, type, buckets);
- groups.put(id, group);
- }
-
- for (OFGroupStatsEntry entry: groupStatsReply.getEntries()) {
- int groupId = entry.getGroup().getGroupNumber();
- DefaultGroup group = (DefaultGroup) groups.get(groupId);
- if (group != null) {
- group.setBytes(entry.getByteCount().getValue());
- group.setLife(entry.getDurationSec());
- group.setPackets(entry.getPacketCount().getValue());
- group.setReferenceCount(entry.getRefCount());
- int bucketIndex = 0;
- for (OFBucketCounter bucketStats:entry.getBucketStats()) {
- ((StoredGroupBucketEntry) group.buckets().buckets()
- .get(bucketIndex))
- .setPackets(bucketStats
- .getPacketCount().getValue());
- ((StoredGroupBucketEntry) group.buckets().buckets()
- .get(bucketIndex))
- .setBytes(entry.getBucketStats()
- .get(bucketIndex)
- .getByteCount().getValue());
- bucketIndex++;
- }
- }
- }
-
- return groups.values();
- }
-
- private GroupDescription.Type getGroupType(OFGroupType type) {
- switch (type) {
- case ALL:
- return GroupDescription.Type.ALL;
- case INDIRECT:
- return GroupDescription.Type.INDIRECT;
- case SELECT:
- return GroupDescription.Type.SELECT;
- case FF:
- return GroupDescription.Type.FAILOVER;
- default:
- log.error("Unsupported OF group type : {}", type);
- break;
- }
- return null;
- }
-
- /**
- * Returns a transaction ID for entire group operations and increases
- * the counter by the number given.
- *
- * @param increase the amount to increase the counter by
- * @return a transaction ID
- */
- public static long getXidAndAdd(int increase) {
- return XID_COUNTER.getAndAdd(increase);
- }
-
- private boolean isGroupSupported(OpenFlowSwitch sw) {
- if (sw.factory().getVersion() == OFVersion.OF_10 ||
- sw.factory().getVersion() == OFVersion.OF_11 ||
- sw.factory().getVersion() == OFVersion.OF_12) {
- return false;
- }
-
- return true;
- }
-
- private class InternalGroupProvider
- implements OpenFlowSwitchListener, OpenFlowEventListener {
-
- @Override
- public void handleMessage(Dpid dpid, OFMessage msg) {
- switch (msg.getType()) {
- case STATS_REPLY:
- pushGroupMetrics(dpid, (OFStatsReply) msg);
- break;
- case ERROR:
- OFErrorMsg errorMsg = (OFErrorMsg) msg;
- if (errorMsg.getErrType() == OFErrorType.GROUP_MOD_FAILED) {
- GroupId pendingGroupId = null;
- for (Map.Entry<GroupId, Long> entry: pendingXidMaps.entrySet()) {
- if (entry.getValue() == errorMsg.getXid()) {
- pendingGroupId = entry.getKey();
- break;
- }
- }
- if (pendingGroupId == null) {
- log.warn("Error for unknown group operation: {}",
- errorMsg.getXid());
- } else {
- GroupOperation operation =
- pendingGroupOperations.get(pendingGroupId);
- DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid));
- if (operation != null) {
- providerService.groupOperationFailed(deviceId,
- operation);
- pendingGroupOperations.remove(pendingGroupId);
- pendingXidMaps.remove(pendingGroupId);
- log.warn("Received an group mod error {}", msg);
- } else {
- log.error("Cannot find pending group operation with group ID: {}",
- pendingGroupId);
- }
- }
- break;
- }
- default:
- break;
- }
- }
-
- @Override
- public void switchAdded(Dpid dpid) {
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null) {
- return;
- }
- if (isGroupSupported(sw)) {
- GroupStatsCollector gsc = new GroupStatsCollector(
- controller.getSwitch(dpid), POLL_INTERVAL);
- gsc.start();
- collectors.put(dpid, gsc);
- }
-
- //figure out race condition
- if (controller.getSwitch(dpid) == null) {
- switchRemoved(dpid);
- }
- }
-
- @Override
- public void switchRemoved(Dpid dpid) {
- GroupStatsCollector collector = collectors.remove(dpid);
- if (collector != null) {
- collector.stop();
- }
- }
-
- @Override
- public void switchChanged(Dpid dpid) {
- }
-
- @Override
- public void portChanged(Dpid dpid, OFPortStatus status) {
- }
-
- @Override
- public void receivedRoleReply(Dpid dpid, RoleState requested, RoleState response) {
- }
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/package-info.java b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/package-info.java
deleted file mode 100644
index 9fda4a31..00000000
--- a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Provider that uses OpenFlow controller as a means of device port group management.
- */
-package org.onosproject.provider.of.group.impl; \ No newline at end of file
diff --git a/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java b/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
deleted file mode 100644
index f923c6f8..00000000
--- a/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * 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.of.group.impl;
-
-import com.google.common.collect.Lists;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.core.GroupId;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.group.DefaultGroupBucket;
-import org.onosproject.net.group.Group;
-import org.onosproject.net.group.GroupBucket;
-import org.onosproject.net.group.GroupBuckets;
-import org.onosproject.net.group.GroupDescription;
-import org.onosproject.net.group.GroupOperation;
-import org.onosproject.net.group.GroupOperations;
-import org.onosproject.net.group.GroupProvider;
-import org.onosproject.net.group.GroupProviderRegistry;
-import org.onosproject.net.group.GroupProviderService;
-import org.onosproject.net.provider.AbstractProviderService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.PacketListener;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFFactories;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
-import org.projectfloodlight.openflow.protocol.OFGroupMod;
-import org.projectfloodlight.openflow.protocol.OFGroupModFailedCode;
-import org.projectfloodlight.openflow.protocol.OFGroupStatsReply;
-import org.projectfloodlight.openflow.protocol.OFGroupType;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFPortDesc;
-import org.projectfloodlight.openflow.protocol.OFVersion;
-import org.projectfloodlight.openflow.protocol.errormsg.OFGroupModFailedErrorMsg;
-import org.projectfloodlight.openflow.types.OFGroup;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import static org.junit.Assert.*;
-
-public class OpenFlowGroupProviderTest {
-
- OpenFlowGroupProvider provider = new OpenFlowGroupProvider();
- private final OpenFlowController controller = new TestController();
- GroupProviderRegistry providerRegistry = new TestGroupProviderRegistry();
- GroupProviderService providerService;
-
- private DeviceId deviceId = DeviceId.deviceId("of:0000000000000001");
- private Dpid dpid1 = Dpid.dpid(deviceId.uri());
-
- @Before
- public void setUp() {
- provider.controller = controller;
- provider.providerRegistry = providerRegistry;
- provider.activate();
- }
-
- @Test
- public void basics() {
- assertNotNull("registration expected", providerService);
- assertEquals("incorrect provider", provider, providerService.provider());
- }
-
- @Test
- public void addGroup() {
-
- GroupId groupId = new DefaultGroupId(1);
-
- List<GroupBucket> bucketList = Lists.newArrayList();
- TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
- builder.setOutput(PortNumber.portNumber(1));
- GroupBucket bucket =
- DefaultGroupBucket.createSelectGroupBucket(builder.build());
- bucketList.add(bucket);
- GroupBuckets buckets = new GroupBuckets(bucketList);
-
- List<GroupOperation> operationList = Lists.newArrayList();
- GroupOperation operation = GroupOperation.createAddGroupOperation(groupId,
- GroupDescription.Type.SELECT, buckets);
- operationList.add(operation);
- GroupOperations operations = new GroupOperations(operationList);
-
- provider.performGroupOperation(deviceId, operations);
-
- final Dpid dpid = Dpid.dpid(deviceId.uri());
- TestOpenFlowSwitch sw = (TestOpenFlowSwitch) controller.getSwitch(dpid);
- assertNotNull("Switch should not be nul", sw);
- assertNotNull("OFGroupMsg should not be null", sw.msg);
-
- }
-
-
- @Test
- public void groupModFailure() {
- TestOpenFlowGroupProviderService testProviderService =
- (TestOpenFlowGroupProviderService) providerService;
-
- GroupId groupId = new DefaultGroupId(1);
- List<GroupBucket> bucketList = Lists.newArrayList();
- TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
- builder.setOutput(PortNumber.portNumber(1));
- GroupBucket bucket =
- DefaultGroupBucket.createSelectGroupBucket(builder.build());
- bucketList.add(bucket);
- GroupBuckets buckets = new GroupBuckets(bucketList);
- List<GroupOperation> operationList = Lists.newArrayList();
- GroupOperation operation = GroupOperation.createAddGroupOperation(groupId,
- GroupDescription.Type.SELECT, buckets);
- operationList.add(operation);
- GroupOperations operations = new GroupOperations(operationList);
-
- provider.performGroupOperation(deviceId, operations);
-
- OFGroupModFailedErrorMsg.Builder errorBuilder =
- OFFactories.getFactory(OFVersion.OF_13).errorMsgs().buildGroupModFailedErrorMsg();
- OFGroupMod.Builder groupBuilder = OFFactories.getFactory(OFVersion.OF_13).buildGroupModify();
- groupBuilder.setGroupType(OFGroupType.ALL);
- groupBuilder.setGroup(OFGroup.of(1));
- errorBuilder.setCode(OFGroupModFailedCode.GROUP_EXISTS);
- errorBuilder.setXid(provider.getXidAndAdd(0) - 1);
-
- controller.processPacket(dpid1, errorBuilder.build());
-
- assertNotNull("Operation failed should not be null",
- testProviderService.failedOperation);
- }
-
-
- @Test
- public void groupStatsEvent() {
- TestOpenFlowGroupProviderService testProviderService =
- (TestOpenFlowGroupProviderService) providerService;
-
- OFGroupStatsReply.Builder rep1 =
- OFFactories.getFactory(OFVersion.OF_13).buildGroupStatsReply();
- rep1.setXid(1);
- controller.processPacket(dpid1, rep1.build());
- OFGroupDescStatsReply.Builder rep2 =
- OFFactories.getFactory(OFVersion.OF_13).buildGroupDescStatsReply();
- assertNull("group entries is not set yet", testProviderService.getGroupEntries());
-
- rep2.setXid(2);
- controller.processPacket(dpid1, rep2.build());
- assertNotNull("group entries should be set", testProviderService.getGroupEntries());
- }
-
-
-
- @After
- public void tearDown() {
- provider.deactivate();
- provider.providerRegistry = null;
- provider.controller = null;
- }
-
- private class TestOpenFlowGroupProviderService
- extends AbstractProviderService<GroupProvider>
- implements GroupProviderService {
-
- Collection<Group> groups = null;
- GroupOperation failedOperation = null;
-
- protected TestOpenFlowGroupProviderService(GroupProvider provider) {
- super(provider);
- }
-
- @Override
- public void groupOperationFailed(DeviceId deviceId, GroupOperation operation) {
- this.failedOperation = operation;
- }
-
- @Override
- public void pushGroupMetrics(DeviceId deviceId, Collection<Group> groupEntries) {
- this.groups = groupEntries;
- }
-
- public Collection<Group> getGroupEntries() {
- return groups;
- }
- }
-
- private class TestController implements OpenFlowController {
-
- OpenFlowEventListener eventListener = null;
- List<OpenFlowSwitch> switches = Lists.newArrayList();
-
- public TestController() {
- OpenFlowSwitch testSwitch = new TestOpenFlowSwitch();
- switches.add(testSwitch);
- }
-
- @Override
- public void addListener(OpenFlowSwitchListener listener) {
- }
-
- @Override
- public void removeListener(OpenFlowSwitchListener listener) {
-
- }
-
- @Override
- public void addPacketListener(int priority, PacketListener listener) {
-
- }
-
- @Override
- public void removePacketListener(PacketListener listener) {
-
- }
-
- @Override
- public void addEventListener(OpenFlowEventListener listener) {
- this.eventListener = listener;
- }
-
- @Override
- public void removeEventListener(OpenFlowEventListener listener) {
-
- }
-
- @Override
- public void write(Dpid dpid, OFMessage msg) {
-
- }
-
- @Override
- public void processPacket(Dpid dpid, OFMessage msg) {
- eventListener.handleMessage(dpid, msg);
- }
-
- @Override
- public void setRole(Dpid dpid, RoleState role) {
-
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getSwitches() {
- return switches;
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getMasterSwitches() {
- return null;
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getEqualSwitches() {
- return null;
- }
-
- @Override
- public OpenFlowSwitch getSwitch(Dpid dpid) {
- return switches.get(0);
- }
-
- @Override
- public OpenFlowSwitch getMasterSwitch(Dpid dpid) {
- return null;
- }
-
- @Override
- public OpenFlowSwitch getEqualSwitch(Dpid dpid) {
- return null;
- }
-
- }
-
- private class TestGroupProviderRegistry implements GroupProviderRegistry {
-
- @Override
- public GroupProviderService register(GroupProvider provider) {
- providerService = new TestOpenFlowGroupProviderService(provider);
- return providerService;
- }
-
- @Override
- public void unregister(GroupProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
- }
-
- private class TestOpenFlowSwitch implements OpenFlowSwitch {
-
- OFMessage msg = null;
-
- @Override
- public void sendMsg(OFMessage msg) {
- this.msg = msg;
- }
-
- @Override
- public void sendMsg(List<OFMessage> msgs) {
-
- }
-
- @Override
- public void handleMessage(OFMessage fromSwitch) {
-
- }
-
- @Override
- public void setRole(RoleState role) {
-
- }
-
- @Override
- public RoleState getRole() {
- return null;
- }
-
- @Override
- public List<OFPortDesc> getPorts() {
- return null;
- }
-
- @Override
- public OFFactory factory() {
- return OFFactories.getFactory(OFVersion.OF_13);
- }
-
- @Override
- public String getStringId() {
- return null;
- }
-
- @Override
- public long getId() {
- return 0;
- }
-
- @Override
- public String manufacturerDescription() {
- return null;
- }
-
- @Override
- public String datapathDescription() {
- return null;
- }
-
- @Override
- public String hardwareDescription() {
- return null;
- }
-
- @Override
- public String softwareDescription() {
- return null;
- }
-
- @Override
- public String serialNumber() {
- return null;
- }
-
- @Override
- public boolean isConnected() {
- return false;
- }
-
- @Override
- public void disconnectSwitch() {
-
- }
-
- @Override
- public void returnRoleReply(RoleState requested, RoleState response) {
-
- }
-
- @Override
- public Device.Type deviceType() {
- return Device.Type.SWITCH;
- }
-
- @Override
- public String channelId() {
- return null;
- }
-
- }
-} \ No newline at end of file
diff --git a/framework/src/onos/providers/openflow/meter/pom.xml b/framework/src/onos/providers/openflow/meter/pom.xml
deleted file mode 100644
index 46bcefcf..00000000
--- a/framework/src/onos/providers/openflow/meter/pom.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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.
- -->
-<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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-of-provider-meter</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS OpenFlow protocol meter provider</description>
-
-</project> \ No newline at end of file
diff --git a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java b/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
deleted file mode 100644
index c07354b6..00000000
--- a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * 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.of.meter.impl;
-
-import org.onosproject.net.meter.Band;
-import org.onosproject.net.meter.Meter;
-import org.onosproject.net.meter.MeterId;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFMeterFlags;
-import org.projectfloodlight.openflow.protocol.OFMeterMod;
-import org.projectfloodlight.openflow.protocol.OFMeterModCommand;
-import org.projectfloodlight.openflow.protocol.meterband.OFMeterBand;
-import org.projectfloodlight.openflow.protocol.meterband.OFMeterBandDrop;
-import org.projectfloodlight.openflow.protocol.meterband.OFMeterBandDscpRemark;
-import org.slf4j.Logger;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Builder for a meter modification.
- */
-public final class MeterModBuilder {
-
- private final Logger log = getLogger(getClass());
-
- private final long xid;
- private final OFFactory factory;
- private Meter.Unit unit = Meter.Unit.KB_PER_SEC;
- private boolean burst = false;
- private Long id;
- private Collection<Band> bands;
-
- public MeterModBuilder(long xid, OFFactory factory) {
- this.xid = xid;
- this.factory = factory;
- }
-
- public static MeterModBuilder builder(long xid, OFFactory factory) {
- return new MeterModBuilder(xid, factory);
- }
-
- public MeterModBuilder withRateUnit(Meter.Unit unit) {
- this.unit = unit;
- return this;
- }
-
- public MeterModBuilder burst() {
- this.burst = true;
- return this;
- }
-
- public MeterModBuilder withId(MeterId meterId) {
- this.id = meterId.id();
- return this;
- }
-
- public MeterModBuilder withBands(Collection<Band> bands) {
- this.bands = bands;
- return this;
- }
-
- public OFMeterMod add() {
- validate();
- OFMeterMod.Builder builder = builderMeterMod();
- builder.setCommand(OFMeterModCommand.ADD.ordinal());
- return builder.build();
- }
-
- public OFMeterMod remove() {
- validate();
- OFMeterMod.Builder builder = builderMeterMod();
- builder.setCommand(OFMeterModCommand.DELETE.ordinal());
- return builder.build();
- }
-
- public OFMeterMod modify() {
- validate();
- OFMeterMod.Builder builder = builderMeterMod();
- builder.setCommand(OFMeterModCommand.MODIFY.ordinal());
- return builder.build();
- }
-
- private OFMeterMod.Builder builderMeterMod() {
- OFMeterMod.Builder builder = factory.buildMeterMod();
- int flags = 0;
- if (burst) {
- // covering loxi short comings.
- flags |= 1 << OFMeterFlags.BURST.ordinal();
- }
- switch (unit) {
- case PKTS_PER_SEC:
- flags |= 1 << OFMeterFlags.PKTPS.ordinal();
- break;
- case KB_PER_SEC:
- flags |= 1 << OFMeterFlags.KBPS.ordinal();
- break;
- default:
- log.warn("Unknown unit type {}", unit);
- }
- //FIXME: THIS WILL CHANGE IN OF1.4 to setBands.
- builder.setMeters(buildBands());
- builder.setFlags(flags)
- .setMeterId(id)
- .setXid(xid);
- return builder;
- }
-
- private List<OFMeterBand> buildBands() {
- return bands.stream().map(b -> {
- switch (b.type()) {
- case DROP:
- OFMeterBandDrop.Builder dropBuilder =
- factory.meterBands().buildDrop();
- if (burst) {
- dropBuilder.setBurstSize(b.burst());
- }
- dropBuilder.setRate(b.rate());
- return dropBuilder.build();
- case REMARK:
- OFMeterBandDscpRemark.Builder remarkBand =
- factory.meterBands().buildDscpRemark();
- if (burst) {
- remarkBand.setBurstSize(b.burst());
- }
- remarkBand.setRate(b.rate());
- remarkBand.setPrecLevel(b.dropPrecedence());
- return remarkBand.build();
- default:
- log.warn("Unknown band type {}", b.type());
- return null;
- }
- }).filter(value -> value != null).collect(Collectors.toList());
- }
-
- private void validate() {
- checkNotNull(id, "id cannot be null");
- checkNotNull(bands, "Must have bands");
- checkArgument(bands.size() > 0, "Must have at lease one band");
- }
-}
diff --git a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java b/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java
deleted file mode 100644
index 83dc6458..00000000
--- a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.of.meter.impl;
-
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.util.Timer;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFMeterStatsRequest;
-import org.slf4j.Logger;
-
-import java.util.concurrent.TimeUnit;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/*
- * Sends Meter Stats Request and collect the Meter statistics with a time interval.
- */
-public class MeterStatsCollector implements TimerTask {
-
- private final HashedWheelTimer timer = Timer.getTimer();
- private final OpenFlowSwitch sw;
- private final Logger log = getLogger(getClass());
- private final int refreshInterval;
-
- private Timeout timeout;
-
- private boolean stopTimer = false;
-
- /**
- * Creates a GroupStatsCollector object.
- *
- * @param sw Open Flow switch
- * @param interval time interval for collecting group statistic
- */
- public MeterStatsCollector(OpenFlowSwitch sw, int interval) {
- this.sw = sw;
- this.refreshInterval = interval;
- }
-
- @Override
- public void run(Timeout timeout) throws Exception {
- log.trace("Collecting stats for {}", sw.getStringId());
-
- sendMeterStatistic();
-
- if (!this.stopTimer) {
- log.trace("Scheduling stats collection in {} seconds for {}",
- this.refreshInterval, this.sw.getStringId());
- timeout.getTimer().newTimeout(this, refreshInterval,
- TimeUnit.SECONDS);
- }
- }
-
- private void sendMeterStatistic() {
- if (log.isTraceEnabled()) {
- log.trace("sendMeterStatistics {}:{}", sw.getStringId(), sw.getRole());
- }
- if (sw.getRole() != RoleState.MASTER) {
- return;
- }
-
- OFMeterStatsRequest.Builder builder =
- sw.factory().buildMeterStatsRequest();
- builder.setXid(0).setMeterId(0xFFFFFFFF);
-
- sw.sendMsg(builder.build());
-
- }
-
- /**
- * Starts the collector.
- */
- public void start() {
- log.info("Starting Meter Stats collection thread for {}", sw.getStringId());
- timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
- }
-
- /**
- * Stops the collector.
- */
- public void stop() {
- log.info("Stopping Meter Stats collection thread for {}", sw.getStringId());
- this.stopTimer = true;
- timeout.cancel();
- }
-}
diff --git a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java b/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
deleted file mode 100644
index e4113790..00000000
--- a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * 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.of.meter.impl;
-
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.RemovalCause;
-import com.google.common.cache.RemovalNotification;
-import com.google.common.collect.Maps;
-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.onosproject.core.CoreService;
-import org.onosproject.net.meter.Band;
-import org.onosproject.net.meter.DefaultBand;
-import org.onosproject.net.meter.DefaultMeter;
-import org.onosproject.net.meter.Meter;
-import org.onosproject.net.meter.MeterFailReason;
-import org.onosproject.net.meter.MeterId;
-import org.onosproject.net.meter.MeterOperation;
-import org.onosproject.net.meter.MeterOperations;
-import org.onosproject.net.meter.MeterProvider;
-import org.onosproject.net.meter.MeterProviderRegistry;
-import org.onosproject.net.meter.MeterProviderService;
-import org.onosproject.net.meter.MeterState;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFErrorMsg;
-import org.projectfloodlight.openflow.protocol.OFErrorType;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFMeterBandStats;
-import org.projectfloodlight.openflow.protocol.OFMeterConfigStatsReply;
-import org.projectfloodlight.openflow.protocol.OFMeterStats;
-import org.projectfloodlight.openflow.protocol.OFMeterStatsReply;
-import org.projectfloodlight.openflow.protocol.OFPortStatus;
-import org.projectfloodlight.openflow.protocol.OFStatsReply;
-import org.projectfloodlight.openflow.protocol.OFStatsType;
-import org.projectfloodlight.openflow.protocol.OFVersion;
-import org.projectfloodlight.openflow.protocol.errormsg.OFMeterModFailedErrorMsg;
-import org.slf4j.Logger;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Collectors;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider which uses an OpenFlow controller to handle meters.
- */
-@Component(immediate = true, enabled = true)
-public class OpenFlowMeterProvider extends AbstractProvider implements MeterProvider {
-
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OpenFlowController controller;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected MeterProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- private MeterProviderService providerService;
-
- private static final AtomicLong XID_COUNTER = new AtomicLong(1);
-
- static final int POLL_INTERVAL = 10;
- static final long TIMEOUT = 30;
-
- private Cache<Long, MeterOperation> pendingOperations;
-
-
- private InternalMeterListener listener = new InternalMeterListener();
- private Map<Dpid, MeterStatsCollector> collectors = Maps.newHashMap();
-
- /**
- * Creates a OpenFlow meter provider.
- */
- public OpenFlowMeterProvider() {
- super(new ProviderId("of", "org.onosproject.provider.meter"));
- }
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
-
- pendingOperations = CacheBuilder.newBuilder()
- .expireAfterWrite(TIMEOUT, TimeUnit.SECONDS)
- .removalListener((RemovalNotification<Long, MeterOperation> notification) -> {
- if (notification.getCause() == RemovalCause.EXPIRED) {
- providerService.meterOperationFailed(notification.getValue(),
- MeterFailReason.TIMEOUT);
- }
- }).build();
-
- controller.addEventListener(listener);
- controller.addListener(listener);
-
- controller.getSwitches().forEach((sw -> createStatsCollection(sw)));
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- collectors.values().forEach(MeterStatsCollector::stop);
- collectors.clear();
- controller.removeEventListener(listener);
- controller.removeListener(listener);
- providerService = null;
- }
-
- @Override
- public void performMeterOperation(DeviceId deviceId, MeterOperations meterOps) {
- Dpid dpid = Dpid.dpid(deviceId.uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null) {
- log.error("Unknown device {}", deviceId);
- meterOps.operations().forEach(op ->
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN_DEVICE)
- );
- return;
- }
-
- meterOps.operations().forEach(op -> performOperation(sw, op));
- }
-
- @Override
- public void performMeterOperation(DeviceId deviceId, MeterOperation meterOp) {
- Dpid dpid = Dpid.dpid(deviceId.uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null) {
- log.error("Unknown device {}", deviceId);
- providerService.meterOperationFailed(meterOp,
- MeterFailReason.UNKNOWN_DEVICE);
- return;
- }
-
- performOperation(sw, meterOp);
-
- }
-
- private void performOperation(OpenFlowSwitch sw, MeterOperation op) {
-
- pendingOperations.put(op.meter().id().id(), op);
-
-
- Meter meter = op.meter();
- MeterModBuilder builder = MeterModBuilder.builder(meter.id().id(), sw.factory());
- if (meter.isBurst()) {
- builder.burst();
- }
- builder.withBands(meter.bands())
- .withId(meter.id())
- .withRateUnit(meter.unit());
-
- switch (op.type()) {
- case ADD:
- sw.sendMsg(builder.add());
- break;
- case REMOVE:
- sw.sendMsg(builder.remove());
- break;
- case MODIFY:
- sw.sendMsg(builder.modify());
- break;
- default:
- log.warn("Unknown Meter command {}; not sending anything",
- op.type());
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN_COMMAND);
- }
-
- }
-
- private void createStatsCollection(OpenFlowSwitch sw) {
- if (isMeterSupported(sw)) {
- MeterStatsCollector msc = new MeterStatsCollector(sw, POLL_INTERVAL);
- msc.start();
- collectors.put(new Dpid(sw.getId()), msc);
- }
- }
-
- private boolean isMeterSupported(OpenFlowSwitch sw) {
- if (sw.factory().getVersion() == OFVersion.OF_10 ||
- sw.factory().getVersion() == OFVersion.OF_11 ||
- sw.factory().getVersion() == OFVersion.OF_12) {
- return false;
- }
-
- return true;
- }
-
- private void pushMeterStats(Dpid dpid, OFStatsReply msg) {
- DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid));
-
- if (msg.getStatsType() == OFStatsType.METER) {
- OFMeterStatsReply reply = (OFMeterStatsReply) msg;
- Collection<Meter> meters = buildMeters(deviceId, reply.getEntries());
- //TODO do meter accounting here.
- providerService.pushMeterMetrics(deviceId, meters);
- } else if (msg.getStatsType() == OFStatsType.METER_CONFIG) {
- OFMeterConfigStatsReply reply = (OFMeterConfigStatsReply) msg;
- // FIXME: Map<Long, Meter> meters = collectMeters(deviceId, reply);
- }
-
- }
-
- private Map<Long, Meter> collectMeters(DeviceId deviceId,
- OFMeterConfigStatsReply reply) {
- return Maps.newHashMap();
- //TODO: Needs a fix to be applied to loxi MeterConfig stat is incorrect
- }
-
- private Collection<Meter> buildMeters(DeviceId deviceId,
- List<OFMeterStats> entries) {
- return entries.stream().map(stat -> {
- DefaultMeter.Builder builder = DefaultMeter.builder();
- Collection<Band> bands = buildBands(stat.getBandStats());
- builder.forDevice(deviceId)
- .withId(MeterId.meterId(stat.getMeterId()))
- //FIXME: need to encode appId in meter id, but that makes
- // things a little annoying for debugging
- .fromApp(coreService.getAppId("org.onosproject.core"))
- .withBands(bands);
- DefaultMeter meter = builder.build();
- meter.setState(MeterState.ADDED);
- meter.setLife(stat.getDurationSec());
- meter.setProcessedBytes(stat.getByteInCount().getValue());
- meter.setProcessedPackets(stat.getPacketInCount().getValue());
- meter.setReferenceCount(stat.getFlowCount());
-
- // marks the meter as seen on the dataplane
- pendingOperations.invalidate(stat.getMeterId());
- return meter;
- }).collect(Collectors.toSet());
- }
-
- private Collection<Band> buildBands(List<OFMeterBandStats> bandStats) {
- return bandStats.stream().map(stat -> {
- DefaultBand band = DefaultBand.builder().build();
- band.setBytes(stat.getByteBandCount().getValue());
- band.setPackets(stat.getPacketBandCount().getValue());
- return band;
- }).collect(Collectors.toSet());
- }
-
- private void signalMeterError(OFMeterModFailedErrorMsg meterError,
- MeterOperation op) {
- switch (meterError.getCode()) {
- case UNKNOWN:
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN_DEVICE);
- break;
- case METER_EXISTS:
- providerService.meterOperationFailed(op,
- MeterFailReason.EXISTING_METER);
- break;
- case INVALID_METER:
- providerService.meterOperationFailed(op,
- MeterFailReason.INVALID_METER);
- break;
- case UNKNOWN_METER:
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN);
- break;
- case BAD_COMMAND:
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN_COMMAND);
- break;
- case BAD_FLAGS:
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN_FLAGS);
- break;
- case BAD_RATE:
- providerService.meterOperationFailed(op,
- MeterFailReason.BAD_RATE);
- break;
- case BAD_BURST:
- providerService.meterOperationFailed(op,
- MeterFailReason.BAD_BURST);
- break;
- case BAD_BAND:
- providerService.meterOperationFailed(op,
- MeterFailReason.BAD_BAND);
- break;
- case BAD_BAND_VALUE:
- providerService.meterOperationFailed(op,
- MeterFailReason.BAD_BAND_VALUE);
- break;
- case OUT_OF_METERS:
- providerService.meterOperationFailed(op,
- MeterFailReason.OUT_OF_METERS);
- break;
- case OUT_OF_BANDS:
- providerService.meterOperationFailed(op,
- MeterFailReason.OUT_OF_BANDS);
- break;
- default:
- providerService.meterOperationFailed(op,
- MeterFailReason.UNKNOWN);
- }
- }
-
- private class InternalMeterListener
- implements OpenFlowSwitchListener, OpenFlowEventListener {
- @Override
- public void handleMessage(Dpid dpid, OFMessage msg) {
- switch (msg.getType()) {
- case STATS_REPLY:
- pushMeterStats(dpid, (OFStatsReply) msg);
- break;
- case ERROR:
- OFErrorMsg error = (OFErrorMsg) msg;
- if (error.getErrType() == OFErrorType.METER_MOD_FAILED) {
- MeterOperation op =
- pendingOperations.getIfPresent(error.getXid());
- pendingOperations.invalidate(error.getXid());
- if (op == null) {
- log.warn("Unknown Meter operation failed {}", error);
- } else {
- OFMeterModFailedErrorMsg meterError =
- (OFMeterModFailedErrorMsg) error;
- signalMeterError(meterError, op);
- }
- }
- break;
- default:
- break;
- }
-
- }
-
- @Override
- public void switchAdded(Dpid dpid) {
- createStatsCollection(controller.getSwitch(dpid));
- }
-
- @Override
- public void switchRemoved(Dpid dpid) {
- MeterStatsCollector msc = collectors.remove(dpid);
- if (msc != null) {
- msc.stop();
- }
- }
-
- @Override
- public void switchChanged(Dpid dpid) {
-
- }
-
- @Override
- public void portChanged(Dpid dpid, OFPortStatus status) {
-
- }
-
- @Override
- public void receivedRoleReply(Dpid dpid, RoleState requested, RoleState response) {
-
- }
- }
-
-
-
-}
diff --git a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/package-info.java b/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/package-info.java
deleted file mode 100644
index 9515712c..00000000
--- a/framework/src/onos/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Provider that uses OpenFlow controller as a means of device metering management.
- */
-package org.onosproject.provider.of.meter.impl; \ No newline at end of file
diff --git a/framework/src/onos/providers/openflow/meter/src/test/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProviderTest.java b/framework/src/onos/providers/openflow/meter/src/test/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProviderTest.java
deleted file mode 100644
index 0c5d5389..00000000
--- a/framework/src/onos/providers/openflow/meter/src/test/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProviderTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.of.meter.impl;
-
-
-public class OpenFlowMeterProviderTest {
-
-
-} \ No newline at end of file
diff --git a/framework/src/onos/providers/openflow/packet/pom.xml b/framework/src/onos/providers/openflow/packet/pom.xml
deleted file mode 100644
index b8dbb689..00000000
--- a/framework/src/onos/providers/openflow/packet/pom.xml
+++ /dev/null
@@ -1,34 +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-of-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-of-provider-packet</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS OpenFlow protocol packet provider</description>
-
-</project>
diff --git a/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java b/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java
deleted file mode 100644
index 6d153103..00000000
--- a/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2014-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.of.packet.impl;
-
-import org.onlab.packet.DeserializationException;
-import org.onlab.packet.Ethernet;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instruction.Type;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.packet.DefaultPacketContext;
-import org.onosproject.net.packet.InboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.openflow.controller.OpenFlowPacketContext;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-/**
- * Packet context used with the OpenFlow providers.
- */
-public class OpenFlowCorePacketContext extends DefaultPacketContext {
-
- private static final Logger log = LoggerFactory.getLogger(OpenFlowCorePacketContext.class);
-
- private final OpenFlowPacketContext ofPktCtx;
-
- /**
- * Creates a new OpenFlow core packet context.
- *
- * @param time creation time
- * @param inPkt inbound packet
- * @param outPkt outbound packet
- * @param block whether the context is blocked or not
- * @param ofPktCtx OpenFlow packet context
- */
- protected OpenFlowCorePacketContext(long time, InboundPacket inPkt,
- OutboundPacket outPkt, boolean block,
- OpenFlowPacketContext ofPktCtx) {
- super(time, inPkt, outPkt, block);
- this.ofPktCtx = ofPktCtx;
- }
-
- @Override
- public void send() {
- if (!this.block()) {
- if (outPacket() == null) {
- sendPacket(null);
- } else {
- try {
- Ethernet eth = Ethernet.deserializer()
- .deserialize(outPacket().data().array(), 0,
- outPacket().data().array().length);
- sendPacket(eth);
- } catch (DeserializationException e) {
- log.warn("Unable to deserialize packet");
- }
- }
- }
- }
-
- private void sendPacket(Ethernet eth) {
- List<Instruction> ins = treatmentBuilder().build().allInstructions();
- OFPort p = null;
- //TODO: support arbitrary list of treatments must be supported in ofPacketContext
- for (Instruction i : ins) {
- if (i.type() == Type.OUTPUT) {
- p = buildPort(((OutputInstruction) i).port());
- break; //for now...
- }
- }
- if (eth == null) {
- ofPktCtx.build(p);
- } else {
- ofPktCtx.build(eth, p);
- }
- ofPktCtx.send();
- }
-
- private OFPort buildPort(PortNumber port) {
- return OFPort.of((int) port.toLong());
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProvider.java b/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProvider.java
deleted file mode 100644
index dc79feff..00000000
--- a/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProvider.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2014-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.of.packet.impl;
-
-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.onosproject.net.ConnectPoint;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.packet.DefaultInboundPacket;
-import org.onosproject.net.packet.DefaultOutboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.net.packet.PacketProvider;
-import org.onosproject.net.packet.PacketProviderRegistry;
-import org.onosproject.net.packet.PacketProviderService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowPacketContext;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.PacketListener;
-import org.projectfloodlight.openflow.protocol.OFPacketOut;
-import org.projectfloodlight.openflow.protocol.OFPortDesc;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
-import org.projectfloodlight.openflow.protocol.ver10.OFFactoryVer10;
-import org.projectfloodlight.openflow.types.OFBufferId;
-import org.projectfloodlight.openflow.types.OFPort;
-import org.slf4j.Logger;
-
-import java.nio.ByteBuffer;
-import java.util.Collections;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-
-/**
- * Provider which uses an OpenFlow controller to detect network
- * infrastructure links.
- */
-@Component(immediate = true)
-public class OpenFlowPacketProvider extends AbstractProvider implements PacketProvider {
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PacketProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OpenFlowController controller;
-
- private PacketProviderService providerService;
-
- private final InternalPacketProvider listener = new InternalPacketProvider();
-
- /**
- * Creates an OpenFlow link provider.
- */
- public OpenFlowPacketProvider() {
- super(new ProviderId("of", "org.onosproject.provider.openflow"));
- }
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- controller.addPacketListener(20, listener);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- controller.removePacketListener(listener);
- providerService = null;
- log.info("Stopped");
- }
-
- @Override
- public void emit(OutboundPacket packet) {
- DeviceId devId = packet.sendThrough();
- String scheme = devId.toString().split(":")[0];
-
- if (!scheme.equals(this.id().scheme())) {
- throw new IllegalArgumentException(
- "Don't know how to handle Device with scheme " + scheme);
- }
-
- Dpid dpid = Dpid.dpid(devId.uri());
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw == null) {
- log.warn("Device {} isn't available?", devId);
- return;
- }
-
- //Ethernet eth = new Ethernet();
- //eth.deserialize(packet.data().array(), 0, packet.data().array().length);
- OFPortDesc p = null;
- for (Instruction inst : packet.treatment().allInstructions()) {
- if (inst.type().equals(Instruction.Type.OUTPUT)) {
- p = portDesc(((OutputInstruction) inst).port());
- OFPacketOut po = packetOut(sw, packet.data().array(), p.getPortNo());
- sw.sendMsg(po);
- }
- }
-
- }
-
- private OFPortDesc portDesc(PortNumber port) {
- OFPortDesc.Builder builder = OFFactoryVer10.INSTANCE.buildPortDesc();
- builder.setPortNo(OFPort.of((int) port.toLong()));
-
- return builder.build();
- }
-
- private OFPacketOut packetOut(OpenFlowSwitch sw, byte[] eth, OFPort out) {
- OFPacketOut.Builder builder = sw.factory().buildPacketOut();
- OFAction act = sw.factory().actions()
- .buildOutput()
- .setPort(out)
- .build();
- return builder
- .setBufferId(OFBufferId.NO_BUFFER)
- .setInPort(OFPort.CONTROLLER)
- .setActions(Collections.singletonList(act))
- .setData(eth)
- .build();
- }
-
- /**
- * Internal Packet Provider implementation.
- *
- */
- private class InternalPacketProvider implements PacketListener {
-
- @Override
- public void handlePacket(OpenFlowPacketContext pktCtx) {
- DeviceId id = DeviceId.deviceId(Dpid.uri(pktCtx.dpid().value()));
-
- DefaultInboundPacket inPkt = new DefaultInboundPacket(
- new ConnectPoint(id, PortNumber.portNumber(pktCtx.inPort())),
- pktCtx.parsed(), ByteBuffer.wrap(pktCtx.unparsed()));
-
- DefaultOutboundPacket outPkt = null;
- if (!pktCtx.isBuffered()) {
- outPkt = new DefaultOutboundPacket(id, null,
- ByteBuffer.wrap(pktCtx.unparsed()));
- }
-
- OpenFlowCorePacketContext corePktCtx =
- new OpenFlowCorePacketContext(System.currentTimeMillis(),
- inPkt, outPkt, pktCtx.isHandled(), pktCtx);
- providerService.processPacket(corePktCtx);
- }
-
- }
-
-
-}
diff --git a/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/package-info.java b/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/package-info.java
deleted file mode 100644
index dd1130c0..00000000
--- a/framework/src/onos/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/package-info.java
+++ /dev/null
@@ -1,21 +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.
- */
-
-/**
- * Provider that uses OpenFlow controller as a means of intercepting and
- * emitting packets.
- */
-package org.onosproject.provider.of.packet.impl;
diff --git a/framework/src/onos/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java b/framework/src/onos/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
deleted file mode 100644
index 5fded926..00000000
--- a/framework/src/onos/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright 2014-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.of.packet.impl;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.ARP;
-import org.onlab.packet.Ethernet;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.packet.DefaultOutboundPacket;
-import org.onosproject.net.packet.OutboundPacket;
-import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketProvider;
-import org.onosproject.net.packet.PacketProviderRegistry;
-import org.onosproject.net.packet.PacketProviderService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openflow.controller.DefaultOpenFlowPacketContext;
-import org.onosproject.openflow.controller.Dpid;
-import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
-import org.onosproject.openflow.controller.OpenFlowPacketContext;
-import org.onosproject.openflow.controller.OpenFlowSwitch;
-import org.onosproject.openflow.controller.OpenFlowSwitchListener;
-import org.onosproject.openflow.controller.PacketListener;
-import org.onosproject.openflow.controller.RoleState;
-import org.projectfloodlight.openflow.protocol.OFFactory;
-import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.projectfloodlight.openflow.protocol.OFPacketIn;
-import org.projectfloodlight.openflow.protocol.OFPacketInReason;
-import org.projectfloodlight.openflow.protocol.OFPortDesc;
-import org.projectfloodlight.openflow.protocol.ver10.OFFactoryVer10;
-import org.projectfloodlight.openflow.types.MacAddress;
-import org.projectfloodlight.openflow.types.OFBufferId;
-import org.projectfloodlight.openflow.types.OFPort;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import static org.junit.Assert.*;
-
-
-public class OpenFlowPacketProviderTest {
-
- private static final int PN1 = 100;
- private static final int PN2 = 200;
- private static final int PN3 = 300;
- private static final short VLANID = (short) 100;
-
- private static final DeviceId DID = DeviceId.deviceId("of:1");
- private static final DeviceId DID_MISSING = DeviceId.deviceId("of:2");
- private static final DeviceId DID_WRONG = DeviceId.deviceId("test:1");
- private static final PortNumber P1 = PortNumber.portNumber(PN1);
- private static final PortNumber P2 = PortNumber.portNumber(PN2);
- private static final PortNumber P3 = PortNumber.portNumber(PN3);
-
- private static final Instruction INST1 = Instructions.createOutput(P1);
- private static final Instruction INST2 = Instructions.createOutput(P2);
- private static final Instruction INST3 = Instructions.createOutput(P3);
-
- private static final OFPortDesc PD1 = portDesc(PN1);
- private static final OFPortDesc PD2 = portDesc(PN2);
-
- private static final List<OFPortDesc> PLIST = Lists.newArrayList(PD1, PD2);
- private static final TrafficTreatment TR = treatment(INST1, INST2);
- private static final TrafficTreatment TR_MISSING = treatment(INST1, INST3);
-
- private static final byte[] ANY = new byte [] {0, 0, 0, 0};
-
- private final OpenFlowPacketProvider provider = new OpenFlowPacketProvider();
- private final TestPacketRegistry registry = new TestPacketRegistry();
- private final TestController controller = new TestController();
-
- private final TestOpenFlowSwitch sw = new TestOpenFlowSwitch();
-
- @Before
- public void startUp() {
- provider.providerRegistry = registry;
- provider.controller = controller;
- provider.activate();
- assertNotNull("listener should be registered", registry.listener);
- }
-
- @After
- public void teardown() {
- provider.deactivate();
- assertNull("listeners shouldn't be registered", registry.listener);
- provider.controller = null;
- provider.providerRegistry = null;
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void wrongScheme() {
- sw.setRole(RoleState.MASTER);
- OutboundPacket schemeFailPkt = outPacket(DID_WRONG, TR, null);
- provider.emit(schemeFailPkt);
- assertEquals("message sent incorrectly", 0, sw.sent.size());
- }
-
- @Test
- public void emit() {
-
- MacAddress mac1 = MacAddress.of("00:00:00:11:00:01");
- MacAddress mac2 = MacAddress.of("00:00:00:22:00:02");
-
- ARP arp = new ARP();
- arp.setSenderProtocolAddress(ANY)
- .setSenderHardwareAddress(mac1.getBytes())
- .setTargetHardwareAddress(mac2.getBytes())
- .setTargetProtocolAddress(ANY)
- .setHardwareType((short) 0)
- .setProtocolType((short) 0)
- .setHardwareAddressLength((byte) 6)
- .setProtocolAddressLength((byte) 4)
- .setOpCode((byte) 0);
-
- Ethernet eth = new Ethernet();
- eth.setVlanID(VLANID)
- .setEtherType(Ethernet.TYPE_ARP)
- .setSourceMACAddress("00:00:00:11:00:01")
- .setDestinationMACAddress("00:00:00:22:00:02")
- .setPayload(arp);
-
- //the should-be working setup.
- OutboundPacket passPkt = outPacket(DID, TR, eth);
- sw.setRole(RoleState.MASTER);
- provider.emit(passPkt);
- assertEquals("invalid switch", sw, controller.current);
- assertEquals("message not sent", PLIST.size(), sw.sent.size());
- sw.sent.clear();
-
- //wrong Role
- //sw.setRole(RoleState.SLAVE);
- //provider.emit(passPkt);
- //assertEquals("invalid switch", sw, controller.current);
- //assertEquals("message sent incorrectly", 0, sw.sent.size());
-
- //sw.setRole(RoleState.MASTER);
-
- //missing switch
- OutboundPacket swFailPkt = outPacket(DID_MISSING, TR, eth);
- provider.emit(swFailPkt);
- assertNull("invalid switch", controller.current);
- assertEquals("message sent incorrectly", 0, sw.sent.size());
-
- //to missing port
- //OutboundPacket portFailPkt = outPacket(DID, TR_MISSING, eth);
- //provider.emit(portFailPkt);
- //assertEquals("extra message sent", 1, sw.sent.size());
-
- }
-
- @Test
- public void handlePacket() {
- OFPacketIn pkt = sw.factory().buildPacketIn()
- .setBufferId(OFBufferId.NO_BUFFER)
- .setInPort(OFPort.NO_MASK)
- .setReason(OFPacketInReason.INVALID_TTL)
- .build();
-
- controller.processPacket(null, pkt);
- assertNotNull("message unprocessed", registry.ctx);
-
- }
-
- private static OFPortDesc portDesc(int port) {
- OFPortDesc.Builder builder = OFFactoryVer10.INSTANCE.buildPortDesc();
- builder.setPortNo(OFPort.of(port));
-
- return builder.build();
- }
-
- private static TrafficTreatment treatment(Instruction ... insts) {
- TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
- for (Instruction i : insts) {
- builder.add(i);
- }
- return builder.build();
- }
-
- private static OutboundPacket outPacket(
- DeviceId d, TrafficTreatment t, Ethernet e) {
- ByteBuffer buf = null;
- if (e != null) {
- buf = ByteBuffer.wrap(e.serialize());
- }
- return new DefaultOutboundPacket(d, t, buf);
- }
-
- private class TestPacketRegistry implements PacketProviderRegistry {
-
- PacketProvider listener = null;
- PacketContext ctx = null;
-
- @Override
- public PacketProviderService register(PacketProvider provider) {
- listener = provider;
- return new TestPacketProviderService();
- }
-
- @Override
- public void unregister(PacketProvider provider) {
- listener = null;
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return Sets.newHashSet(listener.id());
- }
-
- private class TestPacketProviderService implements PacketProviderService {
-
- @Override
- public PacketProvider provider() {
- return null;
- }
-
- @Override
- public void processPacket(PacketContext context) {
- ctx = context;
- }
-
- }
- }
-
- private class TestController implements OpenFlowController {
-
- PacketListener pktListener;
- OpenFlowSwitch current;
-
- @Override
- public Iterable<OpenFlowSwitch> getSwitches() {
- return null;
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getMasterSwitches() {
- return null;
- }
-
- @Override
- public Iterable<OpenFlowSwitch> getEqualSwitches() {
- return null;
- }
-
- @Override
- public OpenFlowSwitch getSwitch(Dpid dpid) {
- if (dpid.equals(Dpid.dpid(DID.uri()))) {
- current = sw;
- } else {
- current = null;
- }
- return current;
- }
-
- @Override
- public OpenFlowSwitch getMasterSwitch(Dpid dpid) {
- return null;
- }
-
- @Override
- public OpenFlowSwitch getEqualSwitch(Dpid dpid) {
- return null;
- }
-
- @Override
- public void addListener(OpenFlowSwitchListener listener) {
- }
-
- @Override
- public void removeListener(OpenFlowSwitchListener listener) {
- }
-
- @Override
- public void addPacketListener(int priority, PacketListener listener) {
- pktListener = listener;
- }
-
- @Override
- public void removePacketListener(PacketListener listener) {
- }
-
- @Override
- public void addEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void removeEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void write(Dpid dpid, OFMessage msg) {
- }
-
- @Override
- public void processPacket(Dpid dpid, OFMessage msg) {
- OpenFlowPacketContext pktCtx =
- DefaultOpenFlowPacketContext.
- packetContextFromPacketIn(sw, (OFPacketIn) msg);
- pktListener.handlePacket(pktCtx);
- }
-
- @Override
- public void setRole(Dpid dpid, RoleState role) {
- }
-
- }
-
- private class TestOpenFlowSwitch implements OpenFlowSwitch {
-
- RoleState state;
- List<OFMessage> sent = new ArrayList<OFMessage>();
- OFFactory factory = OFFactoryVer10.INSTANCE;
-
- @Override
- public void sendMsg(OFMessage msg) {
- sent.add(msg);
- }
-
- @Override
- public void sendMsg(List<OFMessage> msgs) {
- }
-
- @Override
- public void handleMessage(OFMessage fromSwitch) {
- }
-
- @Override
- public void setRole(RoleState role) {
- state = role;
- }
-
- @Override
- public RoleState getRole() {
- return state;
- }
-
- @Override
- public List<OFPortDesc> getPorts() {
- return PLIST;
- }
-
- @Override
- public OFFactory factory() {
- return factory;
- }
-
- @Override
- public String getStringId() {
- return null;
- }
-
- @Override
- public long getId() {
- return 0;
- }
-
- @Override
- public String manufacturerDescription() {
- return null;
- }
-
- @Override
- public String datapathDescription() {
- return null;
- }
-
- @Override
- public String hardwareDescription() {
- return null;
- }
-
- @Override
- public String softwareDescription() {
- return null;
- }
-
- @Override
- public String serialNumber() {
- return null;
- }
-
- @Override
- public boolean isConnected() {
- return true;
- }
-
- @Override
- public void disconnectSwitch() {
- }
-
- @Override
- public void returnRoleReply(RoleState requested, RoleState reponse) {
- }
- @Override
- public Device.Type deviceType() {
- return Device.Type.SWITCH;
- }
-
- @Override
- public String channelId() {
- return "1.2.3.4:1";
- }
-
-
- }
-
-}
diff --git a/framework/src/onos/providers/openflow/pom.xml b/framework/src/onos/providers/openflow/pom.xml
deleted file mode 100644
index 349168e1..00000000
--- a/framework/src/onos/providers/openflow/pom.xml
+++ /dev/null
@@ -1,64 +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-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-of-providers</artifactId>
- <packaging>pom</packaging>
-
- <description>ONOS OpenFlow protocol adapters</description>
-
- <modules>
- <module>device</module>
- <module>packet</module>
- <module>flow</module>
- <module>group</module>
- <module>meter</module>
- <module>base</module>
- <module>app</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-of-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/ovsdb/app/app.xml b/framework/src/onos/providers/ovsdb/app/app.xml
deleted file mode 100644
index c3334994..00000000
--- a/framework/src/onos/providers/ovsdb/app/app.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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.
- -->
-<app name="org.onosproject.ovsdb" origin="ON.Lab" version="${project.version}"
- featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
- features="${project.artifactId}">
- <description>${project.description}</description>
-
- <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-ovsdb-provider-device/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-ovsdb-provider-host/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-ovsdb-provider-tunnel/${project.version}</artifact>
-</app>
diff --git a/framework/src/onos/providers/ovsdb/app/features.xml b/framework/src/onos/providers/ovsdb/app/features.xml
deleted file mode 100644
index d2cb0aa6..00000000
--- a/framework/src/onos/providers/ovsdb/app/features.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
- ~ 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.
- -->
-<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:io.netty/netty-common/4.0.23.Final</bundle>
- <bundle>mvn:io.netty/netty-buffer/4.0.23.Final</bundle>
- <bundle>mvn:io.netty/netty-transport/4.0.23.Final</bundle>
- <bundle>mvn:io.netty/netty-handler/4.0.23.Final</bundle>
- <bundle>mvn:io.netty/netty-codec/4.0.23.Final</bundle>
- <bundle>mvn:${project.groupId}/onos-ovsdb-rfc/${project.version}</bundle>
- <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-ovsdb-provider-device/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-ovsdb-provider-host/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-ovsdb-provider-tunnel/${project.version}</bundle>
- </feature>
-</features>
diff --git a/framework/src/onos/providers/ovsdb/app/pom.xml b/framework/src/onos/providers/ovsdb/app/pom.xml
deleted file mode 100644
index 9101c0f8..00000000
--- a/framework/src/onos/providers/ovsdb/app/pom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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.
- -->
-<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-ovsdb-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-ovsdatabase</artifactId>
- <packaging>pom</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-rfc</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-ctl</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-drivers</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-provider-device</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-provider-host</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-provider-tunnel</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/ovsdb/device/pom.xml b/framework/src/onos/providers/ovsdb/device/pom.xml
deleted file mode 100644
index f770d73f..00000000
--- a/framework/src/onos/providers/ovsdb/device/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!--
- ~ 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.
- -->
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-providers</artifactId>
- <version>1.4.0-rc1</version>
- </parent>
-
- <artifactId>onos-ovsdb-provider-device</artifactId>
- <packaging>bundle</packaging>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java b/framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java
deleted file mode 100644
index d573458e..00000000
--- a/framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProvider.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.ovsdb.providers.device;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.net.URI;
-
-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.onlab.packet.ChassisId;
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.ovsdb.controller.OvsdbClientService;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbNodeId;
-import org.onosproject.ovsdb.controller.OvsdbNodeListener;
-import org.slf4j.Logger;
-
-/**
- * Provider which uses an ovsdb controller to detect device.
- */
-@Component(immediate = true)
-@Service
-public class OvsdbDeviceProvider extends AbstractProvider
- implements DeviceProvider {
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceService deviceService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OvsdbController controller;
-
- private DeviceProviderService providerService;
- private OvsdbNodeListener innerNodeListener = new InnerOvsdbNodeListener();
- protected static final String ISNOTNULL = "OvsdbNodeId is not null";
- private static final String UNKNOWN = "unknown";
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- controller.addNodeListener(innerNodeListener);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- providerService = null;
- log.info("Stopped");
- }
-
- public OvsdbDeviceProvider() {
- super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.device"));
- }
-
- @Override
- public void triggerProbe(DeviceId deviceId) {
- log.info("Triggering probe on device {}", deviceId);
- if (!isReachable(deviceId)) {
- log.error("Failed to probe device {}", deviceId);
- providerService.deviceDisconnected(deviceId);
- return;
- } else {
- log.trace("Confirmed device {} connection", deviceId);
- }
- }
-
- @Override
- public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public boolean isReachable(DeviceId deviceId) {
- OvsdbClientService ovsdbClient = controller.getOvsdbClient(changeDeviceIdToNodeId(deviceId));
- return !(ovsdbClient == null || !ovsdbClient.isConnected());
- }
-
- private class InnerOvsdbNodeListener implements OvsdbNodeListener {
-
- @Override
- public void nodeAdded(OvsdbNodeId nodeId) {
- checkNotNull(nodeId, ISNOTNULL);
- DeviceId deviceId = DeviceId.deviceId(nodeId.toString());
- URI uri = URI.create(nodeId.toString());
- ChassisId cid = new ChassisId();
- String ipAddress = nodeId.getIpAddress();
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("ipaddress", ipAddress).build();
- DeviceDescription deviceDescription = new DefaultDeviceDescription(
- uri,
- Device.Type.CONTROLLER,
- UNKNOWN, UNKNOWN,
- UNKNOWN, UNKNOWN,
- cid,
- annotations);
- providerService.deviceConnected(deviceId, deviceDescription);
-
- }
-
- @Override
- public void nodeRemoved(OvsdbNodeId nodeId) {
- checkNotNull(nodeId, ISNOTNULL);
- DeviceId deviceId = DeviceId.deviceId(nodeId.toString());
- providerService.deviceDisconnected(deviceId);
-
- }
- }
-
- private OvsdbNodeId changeDeviceIdToNodeId(DeviceId deviceId) {
- String[] strings = deviceId.toString().split(":");
- if (strings.length < 1) {
- return null;
- }
- return new OvsdbNodeId(IpAddress.valueOf(strings[1]), 0);
- }
-}
diff --git a/framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/package-info.java b/framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/package-info.java
deleted file mode 100644
index 1636371a..00000000
--- a/framework/src/onos/providers/ovsdb/device/src/main/java/org/onosproject/ovsdb/providers/device/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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.
- */
-
-/**
- *Provider that uses ovsdb controller as a means of infrastructure device discovery.
- *
- */
-package org.onosproject.ovsdb.providers.device; \ No newline at end of file
diff --git a/framework/src/onos/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java b/framework/src/onos/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
deleted file mode 100644
index 7663a64d..00000000
--- a/framework/src/onos/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * 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.ovsdb.providers.device;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.TpPort;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.device.PortStatistics;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.ovsdb.controller.OvsdbClientService;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbEventListener;
-import org.onosproject.ovsdb.controller.OvsdbNodeId;
-import org.onosproject.ovsdb.controller.OvsdbNodeListener;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
-
-/**
- * Test for ovsdb device provider.
- */
-public class OvsdbDeviceProviderTest {
- private final OvsdbDeviceProvider provider = new OvsdbDeviceProvider();
- private final TestDeviceRegistry registry = new TestDeviceRegistry();
- private final TestController controller = new TestController();
-
- @Before
- public void startUp() {
- provider.providerRegistry = registry;
- provider.controller = controller;
- provider.activate();
- assertNotNull("provider should be registered", registry.provider);
- }
-
- @After
- public void tearDown() {
- provider.deactivate();
- provider.controller = null;
- provider.providerRegistry = null;
- }
-
- @Test
- public void triggerProbe() {
-
- }
-
- @Test
- public void testNodeAdded() {
- controller.listener.nodeAdded(new OvsdbNodeId(IpAddress
- .valueOf("192.168.202.36"), 5000));
- assertEquals("ovsdb node added", 1, registry.connected.size());
- }
-
- @Test
- public void testNodeRemoved() {
- controller.listener.nodeAdded(new OvsdbNodeId(IpAddress
- .valueOf("192.168.202.36"), 5000));
- controller.listener.nodeRemoved(new OvsdbNodeId(IpAddress
- .valueOf("192.168.202.36"), 5000));
- assertEquals("ovsdb node removded", 0, registry.connected.size());
- }
-
- private class TestDeviceRegistry implements DeviceProviderRegistry {
- DeviceProvider provider;
-
- Set<DeviceId> connected = new HashSet<>();
- Multimap<DeviceId, PortDescription> ports = HashMultimap.create();
- PortDescription descr = null;
-
- @Override
- public DeviceProviderService register(DeviceProvider provider) {
- this.provider = provider;
- return new TestProviderService();
- }
-
- @Override
- public void unregister(DeviceProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- private class TestProviderService implements DeviceProviderService {
-
- @Override
- public DeviceProvider provider() {
- return null;
- }
-
- @Override
- public void deviceConnected(DeviceId deviceId,
- DeviceDescription deviceDescription) {
- connected.add(deviceId);
- }
-
- @Override
- public void deviceDisconnected(DeviceId deviceId) {
- connected.remove(deviceId);
- ports.removeAll(deviceId);
- }
-
- @Override
- public void updatePorts(DeviceId deviceId,
- List<PortDescription> portDescriptions) {
- for (PortDescription p : portDescriptions) {
- ports.put(deviceId, p);
- }
- }
-
- @Override
- public void portStatusChanged(DeviceId deviceId,
- PortDescription portDescription) {
- ports.put(deviceId, portDescription);
- descr = portDescription;
- }
-
- @Override
- public void receivedRoleReply(DeviceId deviceId,
- MastershipRole requested,
- MastershipRole response) {
- }
-
- @Override
- public void updatePortStatistics(DeviceId deviceId,
- Collection<PortStatistics> portStatistics) {
-
- }
-
- }
- }
-
- private class TestController implements OvsdbController {
- OvsdbNodeListener listener = null;
-
- @Override
- public void addNodeListener(OvsdbNodeListener listener) {
- this.listener = listener;
- }
-
- @Override
- public void removeNodeListener(OvsdbNodeListener listener) {
- this.listener = null;
- }
-
- @Override
- public void addOvsdbEventListener(OvsdbEventListener listener) {
-
- }
-
- @Override
- public void removeOvsdbEventListener(OvsdbEventListener listener) {
-
- }
-
- @Override
- public List<OvsdbNodeId> getNodeIds() {
- return null;
- }
-
- @Override
- public OvsdbClientService getOvsdbClient(OvsdbNodeId nodeId) {
- return null;
- }
-
- @Override
- public void connect(IpAddress ip, TpPort port) {
-
- }
- }
-
-}
diff --git a/framework/src/onos/providers/ovsdb/host/pom.xml b/framework/src/onos/providers/ovsdb/host/pom.xml
deleted file mode 100644
index 3acc7a20..00000000
--- a/framework/src/onos/providers/ovsdb/host/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!--
- ~ 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.
- -->
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-providers</artifactId>
- <version>1.4.0-rc1</version>
- </parent>
-
- <artifactId>onos-ovsdb-provider-host</artifactId>
- <packaging>bundle</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java b/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java
deleted file mode 100644
index 031fda78..00000000
--- a/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * 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.ovsdb.provider.host;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onlab.util.Tools.toHex;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-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.onlab.packet.VlanId;
-import org.onosproject.core.CoreService;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.ovsdb.controller.EventSubject;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbEvent;
-import org.onosproject.ovsdb.controller.OvsdbEventListener;
-import org.onosproject.ovsdb.controller.OvsdbEventSubject;
-import org.slf4j.Logger;
-
-/**
- * Provider which uses an ovsdb controller to detect host.
- */
-@Component(immediate = true)
-@Service
-public class OvsdbHostProvider extends AbstractProvider implements HostProvider {
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostService hostService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OvsdbController controller;
-
- private HostProviderService providerService;
- private OvsdbEventListener innerEventListener = new InnerOvsdbEventListener();
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- controller.addOvsdbEventListener(innerEventListener);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- providerService = null;
- log.info("Stopped");
- }
-
- public OvsdbHostProvider() {
- super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.host"));
- }
-
- @Override
- public void triggerProbe(Host host) {
- log.info("Triggering probe on host {}", host);
- }
-
- private class InnerOvsdbEventListener implements OvsdbEventListener {
-
- @Override
- public void handle(OvsdbEvent<EventSubject> event) {
- OvsdbEventSubject subject = null;
- if (event.subject() instanceof OvsdbEventSubject) {
- subject = (OvsdbEventSubject) event.subject();
- }
- checkNotNull(subject, "EventSubject is not null");
- // If ifaceid is null,it indicates this is not a vm port.
- if (subject.ifaceid() == null) {
- return;
- }
- switch (event.type()) {
- case PORT_ADDED:
- HostId hostId = HostId.hostId(subject.hwAddress(), VlanId.vlanId());
- DeviceId deviceId = DeviceId.deviceId(uri(subject.dpid().value()));
- PortNumber portNumber = PortNumber.portNumber(subject
- .portNumber().value(), subject.portName().value());
- HostLocation loaction = new HostLocation(deviceId, portNumber,
- 0L);
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("ifaceid", subject.ifaceid().value()).build();
- HostDescription hostDescription = new DefaultHostDescription(
- subject.hwAddress(),
- VlanId.vlanId(),
- loaction,
- annotations);
- providerService.hostDetected(hostId, hostDescription);
- break;
- case PORT_REMOVED:
- HostId host = HostId.hostId(subject.hwAddress(), VlanId.vlanId());
- providerService.hostVanished(host);
- break;
- default:
- break;
- }
-
- }
-
- }
-
- public URI uri(String value) {
- try {
- return new URI("of", toHex(Long.valueOf(value)), null);
- } catch (URISyntaxException e) {
- return null;
- }
- }
-}
diff --git a/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/package-info.java b/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/package-info.java
deleted file mode 100644
index 895ae2ec..00000000
--- a/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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.
- */
-
-/**
- *Provider that uses ovsdb controller as a means of infrastructure host discovery.
- *
- */
-package org.onosproject.ovsdb.provider.host; \ No newline at end of file
diff --git a/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java b/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java
deleted file mode 100644
index 01e07dd8..00000000
--- a/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * 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.ovsdb.provider.host;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.List;
-import java.util.Set;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.TpPort;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.HostId;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.provider.AbstractProviderService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.ovsdb.controller.DefaultEventSubject;
-import org.onosproject.ovsdb.controller.EventSubject;
-import org.onosproject.ovsdb.controller.OvsdbClientService;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbDatapathId;
-import org.onosproject.ovsdb.controller.OvsdbEvent;
-import org.onosproject.ovsdb.controller.OvsdbEventListener;
-import org.onosproject.ovsdb.controller.OvsdbIfaceId;
-import org.onosproject.ovsdb.controller.OvsdbNodeId;
-import org.onosproject.ovsdb.controller.OvsdbNodeListener;
-import org.onosproject.ovsdb.controller.OvsdbPortName;
-import org.onosproject.ovsdb.controller.OvsdbPortNumber;
-import org.onosproject.ovsdb.controller.OvsdbPortType;
-
-/**
- * Test for ovsdb host provider.
- */
-public class OvsdbHostProviderTest {
- private static final MacAddress MAC = MacAddress
- .valueOf("00:00:11:00:00:01");
- private final OvsdbHostProvider provider = new OvsdbHostProvider();
- private final TestHostRegistry hostRegistry = new TestHostRegistry();
- protected OvsdbControllerTest controller = new OvsdbControllerTest();
- private TestHostProviderService providerService;
-
- @Before
- public void setUp() {
- provider.providerRegistry = hostRegistry;
- provider.controller = controller;
- provider.activate();
- }
-
- @Test
- public void basics() {
- assertNotNull("registration expected", providerService);
- assertEquals("incorrect provider", provider, providerService.provider());
- }
-
- @Test
- public void portAdded() {
- DefaultEventSubject eventSubject = new DefaultEventSubject(MAC, null,
- new OvsdbPortName("portName"),
- new OvsdbPortNumber(0L),
- new OvsdbDatapathId("10002"),
- new OvsdbPortType("vxlan"),
- new OvsdbIfaceId("102345"));
- controller.ovsdbEventListener
- .handle(new OvsdbEvent<EventSubject>(
- OvsdbEvent.Type.PORT_ADDED,
- eventSubject));
- assertNotNull("never went throught the provider service",
- providerService.added);
-
- }
-
- @Test
- public void portRemoved() {
- DefaultEventSubject eventSubject = new DefaultEventSubject(MAC, null,
- new OvsdbPortName("portName"),
- new OvsdbPortNumber(0L),
- new OvsdbDatapathId("10002"),
- new OvsdbPortType("vxlan"),
- new OvsdbIfaceId("102345"));
- controller.ovsdbEventListener
- .handle(new OvsdbEvent<EventSubject>(
- OvsdbEvent.Type.PORT_REMOVED,
- eventSubject));
- assertEquals("port status unhandled", 1, providerService.removeCount);
- }
-
- @After
- public void tearDown() {
- provider.deactivate();
- provider.coreService = null;
- provider.providerRegistry = null;
- }
-
- private class TestHostRegistry implements HostProviderRegistry {
-
- @Override
- public HostProviderService register(HostProvider provider) {
- providerService = new TestHostProviderService(provider);
- return providerService;
- }
-
- @Override
- public void unregister(HostProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- }
-
- private class TestHostProviderService
- extends AbstractProviderService<HostProvider>
- implements HostProviderService {
-
- DeviceId added = null;
- DeviceId moved = null;
- DeviceId spine = null;
- public int removeCount;
-
- protected TestHostProviderService(HostProvider provider) {
- super(provider);
- }
-
- @Override
- public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
- DeviceId descr = hostDescription.location().deviceId();
- if (added == null) {
- added = descr;
- } else if ((moved == null) && !descr.equals(added)) {
- moved = descr;
- } else {
- spine = descr;
- }
- }
-
- @Override
- public void hostVanished(HostId hostId) {
- removeCount++;
- }
-
- @Override
- public void removeIpFromHost(HostId hostId, IpAddress ipAddress) {
-
- }
-
- }
-
- private class OvsdbControllerTest implements OvsdbController {
- private OvsdbEventListener ovsdbEventListener = null;
-
- @Override
- public void addNodeListener(OvsdbNodeListener listener) {
-
- }
-
- @Override
- public void removeNodeListener(OvsdbNodeListener listener) {
-
- }
-
- @Override
- public void addOvsdbEventListener(OvsdbEventListener listener) {
- ovsdbEventListener = listener;
-
- }
-
- @Override
- public void removeOvsdbEventListener(OvsdbEventListener listener) {
- ovsdbEventListener = null;
-
- }
-
- @Override
- public List<OvsdbNodeId> getNodeIds() {
- return null;
- }
-
- @Override
- public OvsdbClientService getOvsdbClient(OvsdbNodeId nodeId) {
- return null;
- }
-
- @Override
- public void connect(IpAddress ip, TpPort port) {
-
- }
- }
-}
diff --git a/framework/src/onos/providers/ovsdb/pom.xml b/framework/src/onos/providers/ovsdb/pom.xml
deleted file mode 100644
index 1256f1a2..00000000
--- a/framework/src/onos/providers/ovsdb/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!--
- ~ 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.
- -->
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-providers</artifactId>
- <version>1.4.0-rc1</version>
- </parent>
-
- <artifactId>onos-ovsdb-providers</artifactId>
- <packaging>pom</packaging>
-
- <modules>
- <module>device</module>
- <module>host</module>
- <module>tunnel</module>
- <module>app</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </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>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/ovsdb/tunnel/pom.xml b/framework/src/onos/providers/ovsdb/tunnel/pom.xml
deleted file mode 100644
index 455b1747..00000000
--- a/framework/src/onos/providers/ovsdb/tunnel/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!--
- ~ 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.
- -->
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-providers</artifactId>
- <version>1.4.0-rc1</version>
- </parent>
-
- <artifactId>onos-ovsdb-provider-tunnel</artifactId>
- <packaging>bundle</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProvider.java b/framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProvider.java
deleted file mode 100644
index 244e6fe0..00000000
--- a/framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProvider.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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.ovsdb.provider.tunnel;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-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.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelDescription;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelProvider;
-import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
-import org.onosproject.incubator.net.tunnel.TunnelProviderService;
-import org.onosproject.incubator.net.tunnel.TunnelService;
-import org.onosproject.net.ElementId;
-import org.onosproject.net.Path;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.slf4j.Logger;
-
-/**
- * Provider which uses when tunnel added/removed.
- */
-@Component(immediate = true)
-@Service
-public class OvsdbTunnelProvider extends AbstractProvider
- implements TunnelProvider {
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TunnelProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TunnelService tunnelService;
-
- private TunnelProviderService providerService;
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- providerService = null;
- log.info("Stopped");
- }
-
- public OvsdbTunnelProvider() {
- super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.tunnel"));
- }
-
- @Override
- public void setupTunnel(Tunnel tunnel, Path path) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public void setupTunnel(ElementId srcElement, Tunnel tunnel, Path path) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public void releaseTunnel(Tunnel tunnel) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public void releaseTunnel(ElementId srcElement, Tunnel tunnel) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public void updateTunnel(Tunnel tunnel, Path path) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public void updateTunnel(ElementId srcElement, Tunnel tunnel, Path path) {
- // TODO: This will be implemented later.
- }
-
- @Override
- public TunnelId tunnelAdded(TunnelDescription tunnel) {
- return providerService.tunnelAdded(tunnel);
- }
-
- @Override
- public void tunnelRemoved(TunnelDescription tunnel) {
- providerService.tunnelRemoved(tunnel);
- }
-
- @Override
- public void tunnelUpdated(TunnelDescription tunnel) {
- providerService.tunnelUpdated(tunnel);
- }
-
- @Override
- public Tunnel tunnelQueryById(TunnelId tunnelId) {
- // TODO: This will be implemented later.
- return null;
- }
-}
diff --git a/framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/package-info.java b/framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/package-info.java
deleted file mode 100644
index 4f8a1095..00000000
--- a/framework/src/onos/providers/ovsdb/tunnel/src/main/java/org/onosproject/ovsdb/provider/tunnel/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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.
- */
-
-/**
- *Provider that uses ovsdb controller as a means of infrastructure tunnel discovery.
- *
- */
-package org.onosproject.ovsdb.provider.tunnel; \ No newline at end of file
diff --git a/framework/src/onos/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java b/framework/src/onos/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
deleted file mode 100644
index 3d1549e5..00000000
--- a/framework/src/onos/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * 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.ovsdb.provider.tunnel;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.incubator.net.tunnel.DefaultTunnelDescription;
-import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelDescription;
-import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.incubator.net.tunnel.TunnelProvider;
-import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
-import org.onosproject.incubator.net.tunnel.TunnelProviderService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DefaultLink;
-import org.onosproject.net.DefaultPath;
-import org.onosproject.net.Link;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.provider.AbstractProviderService;
-import org.onosproject.net.provider.ProviderId;
-
-/**
- * Test for ovsdb tunnel provider.
- */
-public class OvsdbTunnelProviderTest {
- private final OvsdbTunnelProvider provider = new OvsdbTunnelProvider();
- private final TestTunnelRegistry tunnelRegistry = new TestTunnelRegistry();
- private TestTunnelProviderService providerService;
-
- @Before
- public void setUp() {
- provider.providerRegistry = tunnelRegistry;
- provider.activate();
- }
-
- @Test
- public void basics() {
- assertNotNull("registration expected", providerService);
- assertEquals("incorrect provider", provider, providerService.provider());
- }
-
- @Test
- public void testTunnelAdded() {
- TunnelEndPoint src = IpTunnelEndPoint.ipTunnelPoint(IpAddress
- .valueOf("192.168.1.1"));
- TunnelEndPoint dst = IpTunnelEndPoint.ipTunnelPoint(IpAddress
- .valueOf("192.168.1.3"));
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("bandwidth", "1024").build();
- Link link = new DefaultLink(
- this.provider.id(),
- ConnectPoint.deviceConnectPoint("192.168.2.3/20"),
- ConnectPoint.deviceConnectPoint("192.168.2.4/30"),
- Link.Type.DIRECT);
- List<Link> links = new ArrayList<Link>();
- links.add(link);
- TunnelDescription tunnel = new DefaultTunnelDescription(
- TunnelId.valueOf("1234"),
- src,
- dst,
- Tunnel.Type.VXLAN,
- new DefaultGroupId(0),
- this.provider.id(),
- TunnelName.tunnelName("tunnel12"),
- new DefaultPath(this.provider.id(), links, 0.3),
- annotations);
- provider.tunnelAdded(tunnel);
- assertEquals(1, providerService.tunnelSet.size());
- }
-
- @Test
- public void testTunnelRemoved() {
- TunnelEndPoint src = IpTunnelEndPoint.ipTunnelPoint(IpAddress
- .valueOf("192.168.1.1"));
- TunnelEndPoint dst = IpTunnelEndPoint.ipTunnelPoint(IpAddress
- .valueOf("192.168.1.3"));
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("bandwidth", "1024").build();
- Link link = new DefaultLink(
- this.provider.id(),
- ConnectPoint.deviceConnectPoint("192.168.2.3/20"),
- ConnectPoint.deviceConnectPoint("192.168.2.4/30"),
- Link.Type.DIRECT);
- List<Link> links = new ArrayList<Link>();
- links.add(link);
- TunnelDescription tunnel = new DefaultTunnelDescription(
- TunnelId.valueOf("1234"),
- src,
- dst,
- Tunnel.Type.VXLAN,
- new DefaultGroupId(0),
- this.provider.id(),
- TunnelName.tunnelName("tunnel1"),
- new DefaultPath(this.provider.id(), links, 0.3),
- annotations);
- provider.tunnelRemoved(tunnel);
- assertEquals(0, providerService.tunnelSet.size());
- }
-
- @After
- public void tearDown() {
- provider.deactivate();
- provider.providerRegistry = null;
- }
-
- private class TestTunnelRegistry implements TunnelProviderRegistry {
-
- @Override
- public TunnelProviderService register(TunnelProvider provider) {
- providerService = new TestTunnelProviderService(provider);
- return providerService;
- }
-
- @Override
- public void unregister(TunnelProvider provider) {
-
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- }
-
- private class TestTunnelProviderService
- extends AbstractProviderService<TunnelProvider>
- implements TunnelProviderService {
- Set<TunnelDescription> tunnelSet = new HashSet<TunnelDescription>();
-
- protected TestTunnelProviderService(TunnelProvider provider) {
- super(provider);
- }
-
- @Override
- public TunnelId tunnelAdded(TunnelDescription tunnel) {
- tunnelSet.add(tunnel);
- return null;
- }
-
- @Override
- public void tunnelRemoved(TunnelDescription tunnel) {
- tunnelSet.remove(tunnel);
- }
-
- @Override
- public void tunnelUpdated(TunnelDescription tunnel) {
-
- }
-
- @Override
- public Tunnel tunnelQueryById(TunnelId tunnelId) {
- return null;
- }
-
- }
-}
diff --git a/framework/src/onos/providers/pcep/app/app.xml b/framework/src/onos/providers/pcep/app/app.xml
deleted file mode 100644
index ea3d1d17..00000000
--- a/framework/src/onos/providers/pcep/app/app.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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.
- -->
-<app name="org.onosproject.pcep" origin="ON.Lab" version="${project.version}"
- featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
- features="${project.artifactId}">
- <description>${project.description}</description>
- <artifact>mvn:${project.groupId}/onos-app-pcep-api/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-pcepio/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-pcep-controller-api/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-pcep-controller-impl/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-pcep-provider-topology/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-pcep-provider-tunnel/${project.version}</artifact>
-</app>
diff --git a/framework/src/onos/providers/pcep/app/features.xml b/framework/src/onos/providers/pcep/app/features.xml
deleted file mode 100644
index ad344cd7..00000000
--- a/framework/src/onos/providers/pcep/app/features.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
- ~ 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.
- -->
-<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}/onos-app-pcep-api/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-pcepio/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-pcep-controller-api/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-pcep-controller-impl/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-pcep-provider-topology/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-pcep-provider-tunnel/${project.version}</bundle>
- </feature>
-</features>
diff --git a/framework/src/onos/providers/pcep/app/pom.xml b/framework/src/onos/providers/pcep/app/pom.xml
deleted file mode 100644
index 62a87453..00000000
--- a/framework/src/onos/providers/pcep/app/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-pcep</artifactId>
- <packaging>pom</packaging>
- <description>PCEP protocol southbound providers</description>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-app-pcep-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcepio</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-controller-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-controller-impl</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-provider-topology</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-provider-tunnel</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- </dependencies>
-</project>
diff --git a/framework/src/onos/providers/pcep/pom.xml b/framework/src/onos/providers/pcep/pom.xml
deleted file mode 100644
index 4cde516a..00000000
--- a/framework/src/onos/providers/pcep/pom.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
- <artifactId>onos-pcep-providers</artifactId>
- <packaging>pom</packaging>
- <description>PCEP protocol providers root</description>
- <modules>
- <module>topology</module>
- <module>tunnel</module>
- <module>app</module>
- </modules>
-</project> \ No newline at end of file
diff --git a/framework/src/onos/providers/pcep/topology/pom.xml b/framework/src/onos/providers/pcep/topology/pom.xml
deleted file mode 100644
index cb8e0034..00000000
--- a/framework/src/onos/providers/pcep/topology/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
- <artifactId>onos-pcep-provider-topology</artifactId>
- <packaging>bundle</packaging>
- <description>PCEP topology provider</description>
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-app-pcep-api</artifactId>
- </dependency>
- </dependencies>
-</project> \ No newline at end of file
diff --git a/framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java b/framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
deleted file mode 100644
index 38eaf1fe..00000000
--- a/framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * 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.topology.impl;
-
-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.onlab.packet.ChassisId;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.mastership.MastershipAdminService;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Link.Type;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.OchPort;
-import org.onosproject.net.OduCltPort;
-import org.onosproject.net.OmsPort;
-import org.onosproject.net.Port;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DefaultPortDescription;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceProvider;
-import org.onosproject.net.device.DeviceProviderRegistry;
-import org.onosproject.net.device.DeviceProviderService;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.device.OchPortDescription;
-import org.onosproject.net.device.OduCltPortDescription;
-import org.onosproject.net.device.OmsPortDescription;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.link.DefaultLinkDescription;
-import org.onosproject.net.link.LinkDescription;
-import org.onosproject.net.link.LinkProvider;
-import org.onosproject.net.link.LinkProviderRegistry;
-import org.onosproject.net.link.LinkProviderService;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.pcep.api.PcepController;
-import org.onosproject.pcep.api.PcepDpid;
-import org.onosproject.pcep.api.PcepLink;
-import org.onosproject.pcep.api.PcepLink.PortType;
-import org.onosproject.pcep.api.PcepLinkListener;
-import org.onosproject.pcep.api.PcepOperator.OperationType;
-import org.onosproject.pcep.api.PcepSwitch;
-import org.onosproject.pcep.api.PcepSwitchListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.pcep.api.PcepDpid.uri;
-
-/**
- * Provider which uses an PCEP controller to detect network infrastructure
- * topology.
- */
-@Component(immediate = true)
-public class PcepTopologyProvider extends AbstractProvider
- implements LinkProvider, DeviceProvider {
-
- public PcepTopologyProvider() {
- super(new ProviderId("pcep", "org.onosproject.provider.pcep"));
- }
-
- private static final Logger log = LoggerFactory
- .getLogger(PcepTopologyProvider.class);
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LinkProviderRegistry linkProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceProviderRegistry deviceProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PcepController controller;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceService deviceService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LinkService linkService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected MastershipAdminService mastershipAdminService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected MastershipService mastershipService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ClusterService clusterService;
-
- private DeviceProviderService deviceProviderService;
- private LinkProviderService linkProviderService;
-
- private HashMap<Long, List<PortDescription>> portMap = new HashMap<>();
- private InternalLinkProvider listener = new InternalLinkProvider();
-
- @Activate
- public void activate() {
- linkProviderService = linkProviderRegistry.register(this);
- deviceProviderService = deviceProviderRegistry.register(this);
- controller.addListener(listener);
- controller.addLinkListener(listener);
- }
-
- @Deactivate
- public void deactivate() {
- linkProviderRegistry.unregister(this);
- linkProviderService = null;
- controller.removeListener(listener);
- controller.removeLinkListener(listener);
- }
-
- private List<PortDescription> buildPortDescriptions(PcepDpid dpid,
- Port port,
- PortType portType) {
-
- List<PortDescription> portList;
-
- if (portMap.containsKey(dpid.value())) {
- portList = portMap.get(dpid.value());
- } else {
- portList = new ArrayList<>();
- }
- if (port != null && portType != null) {
- portList.add(buildPortDescription(port, portType));
- }
-
- portMap.put(dpid.value(), portList);
- return portList;
- }
-
- private PortDescription buildPortDescription(Port port, PortType portType) {
- PortDescription portDescription;
-
- switch (portType) {
- case OCH_PORT:
- OchPort ochp = (OchPort) port;
- portDescription = new OchPortDescription(ochp.number(), ochp.isEnabled(),
- ochp.signalType(), ochp.isTunable(),
- ochp.lambda());
- break;
- case ODU_PORT:
- OduCltPort odup = (OduCltPort) port;
- portDescription = new OduCltPortDescription(odup.number(), odup.isEnabled(),
- odup.signalType());
- break;
- case OMS_PORT:
- OmsPort op = (OmsPort) port;
- portDescription = new OmsPortDescription(op.number(), op.isEnabled(), op.minFrequency(),
- op.maxFrequency(), op.grid());
- break;
- default:
- portDescription = new DefaultPortDescription(port.number(), port.isEnabled());
- break;
- }
- return portDescription;
- }
-
- /**
- * Build a link description from a pcep link.
- *
- * @param pceLink pcep link
- * @return LinkDescription onos link description
- */
- private LinkDescription buildLinkDescription(PcepLink pceLink) {
- LinkDescription ld;
- checkNotNull(pceLink);
- DeviceId srcDeviceID = deviceId(uri(pceLink.linkSrcDeviceID()));
- DeviceId dstDeviceID = deviceId(uri(pceLink.linkDstDeviceId()));
-
- deviceProviderService
- .updatePorts(srcDeviceID,
- buildPortDescriptions(pceLink.linkSrcDeviceID(),
- pceLink.linkSrcPort(), pceLink.portType()));
-
- deviceProviderService
- .updatePorts(dstDeviceID,
- buildPortDescriptions(pceLink.linkDstDeviceId(),
- pceLink.linkDstPort(), pceLink.portType()));
-
- ConnectPoint src = new ConnectPoint(srcDeviceID, pceLink.linkSrcPort().number());
-
- ConnectPoint dst = new ConnectPoint(dstDeviceID, pceLink.linkDstPort().number());
-
- DefaultAnnotations extendedAttributes = DefaultAnnotations
- .builder()
- .set("subType", String.valueOf(pceLink.linkSubType()))
- .set("workState", pceLink.linkState())
- .set("distance", String.valueOf(pceLink.linkDistance()))
- .set("capType", pceLink.linkCapacityType().toLowerCase())
- .set("avail_" + pceLink.linkCapacityType().toLowerCase(),
- String.valueOf(pceLink.linkAvailValue()))
- .set("max_" + pceLink.linkCapacityType().toLowerCase(),
- String.valueOf(pceLink.linkMaxValue())).build();
- // construct the link
- ld = new DefaultLinkDescription(src, dst, Type.OPTICAL, extendedAttributes);
- return ld;
- }
-
- private class InternalLinkProvider
- implements PcepSwitchListener, PcepLinkListener {
-
- @Override
- public void switchAdded(PcepDpid dpid) {
- if (deviceProviderService == null) {
- return;
- }
- DeviceId deviceId = deviceId(uri(dpid));
- PcepSwitch sw = controller.getSwitch(dpid);
- checkNotNull(sw, "device should not null.");
- // The default device type is switch.
- ChassisId cId = new ChassisId(dpid.value());
- Device.Type deviceType;
-
- switch (sw.getDeviceType()) {
- case ROADM:
- deviceType = Device.Type.ROADM;
- break;
- case OTN:
- deviceType = Device.Type.SWITCH;
- break;
- case ROUTER:
- deviceType = Device.Type.ROUTER;
- break;
- default:
- deviceType = Device.Type.OTHER;
- }
-
- DeviceDescription description = new DefaultDeviceDescription(
- deviceId.uri(),
- deviceType,
- sw.manufacturerDescription(),
- sw.hardwareDescription(),
- sw.softwareDescription(),
- sw.serialNumber(),
- cId);
- deviceProviderService.deviceConnected(deviceId, description);
-
- }
-
- @Override
- public void switchRemoved(PcepDpid dpid) {
- if (deviceProviderService == null || linkProviderService == null) {
- return;
- }
- deviceProviderService.deviceDisconnected(deviceId(uri(dpid)));
-
- linkProviderService.linksVanished(DeviceId.deviceId(uri(dpid)));
- }
-
- @Override
- public void switchChanged(PcepDpid dpid) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void handlePCEPlink(PcepLink link) {
-
- OperationType operType = link.getOperationType();
- LinkDescription ld = buildLinkDescription(link);
- if (ld == null) {
- log.error("Invalid link info.");
- return;
- }
- switch (operType) {
- case ADD:
- case UPDATE:
- linkProviderService.linkDetected(ld);
- break;
-
- case DELETE:
- linkProviderService.linkVanished(ld);
- break;
-
- default:
- break;
-
- }
- }
-
- }
-
- @Override
- public void triggerProbe(DeviceId deviceId) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
- }
-
- @Override
- public boolean isReachable(DeviceId deviceId) {
- // TODO Auto-generated method stub
- return true;
- }
-}
diff --git a/framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/package-info.java b/framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/package-info.java
deleted file mode 100644
index c119266d..00000000
--- a/framework/src/onos/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-/**
- *Provider that uses PCEP controller as a means of infrastructure topology discovery.
- */
-package org.onosproject.provider.pcep.topology.impl; \ No newline at end of file
diff --git a/framework/src/onos/providers/pcep/tunnel/pom.xml b/framework/src/onos/providers/pcep/tunnel/pom.xml
deleted file mode 100644
index af303f89..00000000
--- a/framework/src/onos/providers/pcep/tunnel/pom.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
- ~ 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.
- -->
-<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">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
- <artifactId>onos-pcep-provider-tunnel</artifactId>
- <packaging>bundle</packaging>
- <description>PCEP-based tunnel provider</description>
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-app-pcep-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-pcep-controller-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-incubator-net</artifactId>
- <version>${project.version} </version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project> \ No newline at end of file
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
deleted file mode 100644
index b7aa3bda..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * 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);
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelData.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelData.java
deleted file mode 100644
index f796a2de..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelData.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * 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.Objects;
-
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.net.ElementId;
-import org.onosproject.net.Path;
-import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv;
-
-import com.google.common.base.MoreObjects;
-
-/**
- * To store all tunnel related information from Core and Path computation client.
- */
-public class PcepTunnelData {
-
- private Tunnel tunnel;
- private Path path;
- private int plspId;
- private ElementId elementId;
- private RequestType requestType;
- private boolean rptFlag;
-
- // data need to store from LSP object
- private boolean lspAFlag;
- private boolean lspDFlag;
- private byte lspOFlag;
- private short tunnelId;
- private int extTunnelId;
- private short lspId;
- private StatefulIPv4LspIdentidiersTlv statefulIpv4IndentifierTlv;
-
- /**
- * Default constructor.
- */
- public PcepTunnelData() {
- this.elementId = null;
- this.tunnel = null;
- this.path = null;
- this.requestType = null;
- this.rptFlag = false;
- this.plspId = 0;
- }
-
- /**
- * Constructor to initialize Tunnel, Path and Request type.
- *
- * @param tunnel mpls tunnel
- * @param path Path in network
- * @param requestType request type for tunnel
- */
- public PcepTunnelData(Tunnel tunnel, Path path, RequestType requestType) {
- this.tunnel = tunnel;
- this.path = path;
- this.requestType = requestType;
- }
-
- /**
- * Constructor to initialize ElemendId, Tunnel, Path and Request type.
- *
- * @param elementId Ip element id
- * @param tunnel mpls tunnel
- * @param path Path in network
- * @param requestType request type for tunnel
- */
- public PcepTunnelData(ElementId elementId, Tunnel tunnel, Path path, RequestType requestType) {
- this.elementId = elementId;
- this.tunnel = tunnel;
- this.path = path;
- this.requestType = requestType;
- }
-
- /**
- * Constructor to initialize Tunnel and Request type.
- *
- * @param tunnel Tunnel from core
- * @param requestType request type for tunnel
- */
- public PcepTunnelData(Tunnel tunnel, RequestType requestType) {
- this.tunnel = tunnel;
- this.requestType = requestType;
- }
-
- /**
- * Constructor to initialize ElementId, Tunnel and Request type.
- *
- * @param elementId Ip element id
- * @param tunnel mpls tunnel
- * @param requestType request type for tunnel
- */
- public PcepTunnelData(ElementId elementId, Tunnel tunnel, RequestType requestType) {
- this.elementId = elementId;
- this.tunnel = tunnel;
- this.requestType = requestType;
- }
-
- /**
- * Sets ip element id.
- *
- * @param elementId Ip element id
- */
- public void setElementId(ElementId elementId) {
- this.elementId = elementId;
- }
-
- /**
- * Sets tunnel.
- *
- * @param tunnel mpls tunnel
- */
- public void setTunnel(Tunnel tunnel) {
- this.tunnel = tunnel;
- }
-
- /**
- * Sets Path.
- *
- * @param path Path in network
- */
- public void setPath(Path path) {
- this.path = path;
- }
-
- /**
- * Request type for tunnel.
- *
- * @param requestType request type for tunnel
- */
- public void setRequestType(RequestType requestType) {
- this.requestType = requestType;
- }
-
- /**
- * Sets plspid generated from pcc.
- *
- * @param plspId plsp identifier
- */
- public void setPlspId(int plspId) {
- this.plspId = plspId;
- }
-
- /**
- * Sets A flag from lsp object.
- *
- * @param value A flag value
- */
- public void setLspAFlag(boolean value) {
- this.lspAFlag = value;
- }
-
- /**
- * Sets OF flag from lsp object.
- *
- * @param value OF flag value
- */
- public void setLspOFlag(byte value) {
- this.lspOFlag = value;
- }
-
- /**
- * Sets tunnel id from PCC.
- *
- * @param value tunnel id value
- */
- public void setTunnelId(short value) {
- this.tunnelId = value;
- }
-
- /**
- * Sets extended tunnel id from PCC.
- *
- * @param value extended tunnel id value
- */
- public void setExtTunnelId(int value) {
- this.extTunnelId = value;
- }
-
- /**
- * Sets lsp id from pcc.
- *
- * @param value lsp id
- */
- public void setLspId(short value) {
- this.lspId = value;
- }
-
- /**
- * Sets statefulIpv4Identifiers tlv.
- * @param value statefulIpv4Identifiers tlv
- */
- public void setStatefulIpv4IndentifierTlv(StatefulIPv4LspIdentidiersTlv value) {
- this.statefulIpv4IndentifierTlv = value;
- }
-
- /**
- * Sets report flag.
- *
- * @param rptFlag report flag
- */
- public void setRptFlag(boolean rptFlag) {
- this.rptFlag = rptFlag;
- }
-
- /**
- * Sets D flag from lsp object.
- *
- * @param value D flag value
- */
- public void setLspDFlag(boolean value) {
- this.lspDFlag = value;
- }
-
- /**
- * To get Ip element id.
- *
- * @return Ip elemend id
- */
- public ElementId elementId() {
- return this.elementId;
- }
-
- /**
- * To get Tunnel.
- *
- * @return tunnel
- */
- public Tunnel tunnel() {
- return this.tunnel;
- }
-
- /**
- * To get Path.
- *
- * @return path
- */
- public Path path() {
- return this.path;
- }
-
- /**
- * To get request type.
- *
- * @return request type
- */
- public RequestType requestType() {
- return this.requestType;
- }
-
- /**
- * To get pLspId.
- *
- * @return pLspId
- */
- public int plspId() {
- return this.plspId;
- }
-
- /**
- * To get A flag.
- *
- * @return A flag
- */
- public boolean lspAFlag() {
- return this.lspAFlag;
- }
-
- /**
- * To get OF flag.
- *
- * @return OF flag
- */
- public byte lspOFlag() {
- return this.lspOFlag;
- }
-
- /**
- * To get tunnel id.
- *
- * @return tunnel id
- */
- public short tunnelId() {
- return this.tunnelId;
- }
-
- /**
- * To get extended tunnel id.
- *
- * @return extended tunnel id
- */
- public int extTunnelId() {
- return this.extTunnelId;
- }
-
- /**
- * To get pLspId.
- *
- * @return pLspId
- */
- public short lspId() {
- return this.lspId;
- }
-
- /**
- * To get D Flag.
- *
- * @return d flag
- */
- public boolean lspDFlag() {
- return this.lspDFlag;
- }
-
- /**
- * To get statefulIpv4Indentifier tlv.
- *
- * @return statefulIpv4Indentifier tlv
- */
- public StatefulIPv4LspIdentidiersTlv statefulIpv4IndentifierTlv() {
- return this.statefulIpv4IndentifierTlv;
- }
-
- /**
- * To get report flag.
- *
- * @return report flag
- */
- public boolean rptFlag() {
- return this.rptFlag;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj instanceof PcepTunnelData) {
- PcepTunnelData other = (PcepTunnelData) obj;
- return Objects.equals(tunnel, other.tunnel)
- && Objects.equals(path, other.path)
- && Objects.equals(plspId, other.plspId)
- && Objects.equals(elementId, other.elementId)
- && Objects.equals(requestType, other.requestType)
- && Objects.equals(rptFlag, other.rptFlag)
- && Objects.equals(lspAFlag, other.lspAFlag)
- && Objects.equals(lspDFlag, other.lspDFlag)
- && Objects.equals(lspOFlag, other.lspOFlag)
- && Objects.equals(tunnelId, other.tunnelId)
- && Objects.equals(extTunnelId, other.extTunnelId)
- && Objects.equals(lspId, other.lspId)
- && Objects.equals(statefulIpv4IndentifierTlv, other.statefulIpv4IndentifierTlv);
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(tunnel, path, plspId, elementId, requestType, rptFlag, lspAFlag,
- lspDFlag, lspOFlag, tunnelId, extTunnelId, lspId, statefulIpv4IndentifierTlv);
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(getClass()).add("Tunnel", tunnel)
- .add("Path", path).add("PlspId", plspId).add("ElementId", elementId)
- .add("RequestType", requestType).add("RptFlag", rptFlag).add("LspAFlag", lspAFlag)
- .add("LspDFlag", lspDFlag).add("LspOFlag", lspOFlag).add("TunnelId", tunnelId)
- .add("ExtTunnelid", extTunnelId).add("LspId", lspId)
- .add("StatefulIpv4IndentifierTlv", statefulIpv4IndentifierTlv).toString();
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
deleted file mode 100644
index 648e500b..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
+++ /dev/null
@@ -1,1230 +0,0 @@
-/*
- * 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 static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.net.DefaultAnnotations.EMPTY;
-import static org.onlab.util.Tools.get;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.pcep.api.PcepDpid.uri;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Optional;
-
-import com.google.common.collect.Maps;
-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.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.packet.IpAddress;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.DefaultTunnel;
-import org.onosproject.incubator.net.tunnel.DefaultTunnelDescription;
-import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.DefaultTunnelStatistics;
-import org.onosproject.incubator.net.tunnel.OpticalLogicId;
-import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelDescription;
-import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.incubator.net.tunnel.TunnelProvider;
-import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
-import org.onosproject.incubator.net.tunnel.TunnelProviderService;
-import org.onosproject.incubator.net.tunnel.TunnelService;
-import org.onosproject.incubator.net.tunnel.TunnelStatistics;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DefaultLink;
-import org.onosproject.net.DefaultPath;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.ElementId;
-import org.onosproject.net.IpElementId;
-import org.onosproject.net.Link;
-import org.onosproject.net.Path;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.pcep.api.PcepController;
-import org.onosproject.pcep.api.PcepDpid;
-import org.onosproject.pcep.api.PcepHopNodeDescription;
-import org.onosproject.pcep.api.PcepOperator.OperationType;
-import org.onosproject.pcep.api.PcepTunnel;
-import org.onosproject.pcep.api.PcepTunnel.PATHTYPE;
-import org.onosproject.pcep.api.PcepTunnel.PathState;
-import org.onosproject.pcep.api.PcepTunnelListener;
-import org.onosproject.pcep.api.PcepTunnelStatistics;
-import org.osgi.service.component.annotations.Modified;
-import org.onosproject.pcep.controller.PccId;
-import org.onosproject.pcep.controller.PcepClient;
-import org.onosproject.pcep.controller.PcepClientController;
-import org.onosproject.pcep.controller.PcepClientListener;
-import org.onosproject.pcep.controller.PcepEventListener;
-import org.onosproject.pcepio.exceptions.PcepParseException;
-import org.onosproject.pcepio.protocol.PcInitiatedLspRequest;
-import org.onosproject.pcepio.protocol.PcepAttribute;
-import org.onosproject.pcepio.protocol.PcepBandwidthObject;
-import org.onosproject.pcepio.protocol.PcepEndPointsObject;
-import org.onosproject.pcepio.protocol.PcepEroObject;
-import org.onosproject.pcepio.protocol.PcepInitiateMsg;
-import org.onosproject.pcepio.protocol.PcepLspObject;
-import org.onosproject.pcepio.protocol.PcepMessage;
-import org.onosproject.pcepio.protocol.PcepMsgPath;
-import org.onosproject.pcepio.protocol.PcepReportMsg;
-import org.onosproject.pcepio.protocol.PcepRroObject;
-import org.onosproject.pcepio.protocol.PcepSrpObject;
-import org.onosproject.pcepio.protocol.PcepStateReport;
-import org.onosproject.pcepio.protocol.PcepUpdateMsg;
-import org.onosproject.pcepio.protocol.PcepUpdateRequest;
-import org.onosproject.pcepio.types.IPv4SubObject;
-import org.onosproject.pcepio.types.PcepValueType;
-import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv;
-import org.onosproject.pcepio.types.SymbolicPathNameTlv;
-import org.slf4j.Logger;
-import org.osgi.service.component.ComponentContext;
-
-/**
- * Provider which uses an PCEP controller to detect, update, create network
- * tunnels.
- */
-@Component(immediate = true)
-@Service
-public class PcepTunnelProvider extends AbstractProvider implements TunnelProvider {
-
- private static final Logger log = getLogger(PcepTunnelProvider.class);
- private static final long MAX_BANDWIDTH = 99999744;
- private static final long MIN_BANDWIDTH = 64;
- private static final String BANDWIDTH_UINT = "kbps";
- static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
-
- static final int POLL_INTERVAL = 10;
- @Property(name = "tunnelStatsPollFrequency", intValue = POLL_INTERVAL,
- label = "Frequency (in seconds) for polling tunnel statistics")
- private int tunnelStatsPollFrequency = POLL_INTERVAL;
-
- private static final String TUNNLE_NOT_NULL = "Create failed,The given port may be wrong or has been occupied.";
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TunnelProviderRegistry tunnelProviderRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PcepController controller;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PcepClientController pcepClientController;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TunnelService tunnelService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ComponentConfigService cfgService;
-
- TunnelProviderService service;
-
- HashMap<String, TunnelId> tunnelMap = new HashMap<String, TunnelId>();
- HashMap<TunnelId, TunnelStatistics> tunnelStatisticsMap = new HashMap<>();
- private HashMap<Long, TunnelStatsCollector> collectors = Maps.newHashMap();
-
- private InnerTunnelProvider listener = new InnerTunnelProvider();
-
- protected PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper();
- private static final int DEFAULT_BANDWIDTH_VALUE = 10;
-
- /**
- * Creates a Tunnel provider.
- */
- public PcepTunnelProvider() {
- super(new ProviderId("pcep", PROVIDER_ID));
- }
-
- @Activate
- public void activate() {
- cfgService.registerProperties(getClass());
- service = tunnelProviderRegistry.register(this);
- controller.addTunnelListener(listener);
- pcepClientController.addListener(listener);
- pcepClientController.addEventListener(listener);
- tunnelService.queryAllTunnels().forEach(tunnel -> {
- String pcepTunnelId = getPCEPTunnelKey(tunnel.tunnelId());
- TunnelStatsCollector tsc = new TunnelStatsCollector(pcepTunnelId, tunnelStatsPollFrequency);
- tsc.start();
- collectors.put(tunnel.tunnelId().id(), tsc);
-
- });
-
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- tunnelProviderRegistry.unregister(this);
- controller.removeTunnelListener(listener);
- collectors.values().forEach(TunnelStatsCollector::stop);
- pcepClientController.removeListener(listener);
- log.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- Dictionary<?, ?> properties = context.getProperties();
- int newTunnelStatsPollFrequency;
- try {
- String s = get(properties, "tunnelStatsPollFrequency");
- newTunnelStatsPollFrequency = isNullOrEmpty(s) ? tunnelStatsPollFrequency : Integer.parseInt(s.trim());
-
- } catch (NumberFormatException | ClassCastException e) {
- newTunnelStatsPollFrequency = tunnelStatsPollFrequency;
- }
-
- if (newTunnelStatsPollFrequency != tunnelStatsPollFrequency) {
- tunnelStatsPollFrequency = newTunnelStatsPollFrequency;
- collectors.values().forEach(tsc -> tsc.adjustPollInterval(tunnelStatsPollFrequency));
- log.info("New setting: tunnelStatsPollFrequency={}", tunnelStatsPollFrequency);
- }
-
- }
-
- @Override
- public void setupTunnel(Tunnel tunnel, Path path) {
- if (tunnel.type() != Tunnel.Type.MPLS) {
- log.error("Tunnel Type MPLS is only supported");
- return;
- }
-
- // check for tunnel end points
- if (!(tunnel.src() instanceof IpTunnelEndPoint) || !(tunnel.dst() instanceof IpTunnelEndPoint)) {
- log.error("Tunnel source or destination is not valid");
- return;
- }
-
- // Get the pcc client
- PcepClient pc = pcepClientController.getClient(PccId.pccId(((IpTunnelEndPoint) tunnel.src()).ip()));
-
- if (!(pc instanceof PcepClient)) {
- log.error("There is no PCC connected with ip addresss {}"
- + ((IpTunnelEndPoint) tunnel.src()).ip().toString());
- return;
- }
- pcepSetupTunnel(tunnel, path, pc);
- }
-
- @Override
- public void setupTunnel(ElementId srcElement, Tunnel tunnel, Path path) {
-
- if (tunnel.type() != Tunnel.Type.MPLS) {
- log.error("Tunnel Type MPLS is only supported");
- return;
- }
-
- if (!(srcElement instanceof IpElementId)) {
- log.error("Element id is not valid");
- return;
- }
-
- // check for tunnel end points
- if (!(tunnel.src() instanceof IpTunnelEndPoint) || !(tunnel.dst() instanceof IpTunnelEndPoint)) {
- log.error("Tunnel source or destination is not valid");
- return;
- }
-
- PcepClient pc = pcepClientController.getClient(PccId.pccId(((IpElementId) srcElement).ipAddress()));
-
- if (!(pc instanceof PcepClient)) {
- log.error("There is no PCC connected with ip addresss {}"
- + ((IpElementId) srcElement).ipAddress().toString());
- return;
- }
- pcepSetupTunnel(tunnel, path, pc);
- }
-
- @Override
- public void releaseTunnel(Tunnel tunnel) {
-
- if (tunnel.type() != Tunnel.Type.MPLS) {
- log.error("Tunnel Type MPLS is only supported");
- return;
- }
-
- // check for tunnel end points
- if (!(tunnel.src() instanceof IpTunnelEndPoint) || !(tunnel.dst() instanceof IpTunnelEndPoint)) {
- log.error("Tunnel source or destination is not valid");
- return;
- }
-
- PcepClient pc = pcepClientController.getClient(PccId.pccId(((IpTunnelEndPoint) tunnel.src()).ip()));
-
- if (!(pc instanceof PcepClient)) {
- log.error("There is no PCC connected with ip addresss {}"
- + ((IpTunnelEndPoint) tunnel.src()).ip().toString());
- return;
- }
- pcepReleaseTunnel(tunnel, pc);
- }
-
- @Override
- public void releaseTunnel(ElementId srcElement, Tunnel tunnel) {
- if (tunnel.type() != Tunnel.Type.MPLS) {
- log.error("Tunnel Type MPLS is only supported");
- return;
- }
-
- if (!(srcElement instanceof IpElementId)) {
- log.error("Element id is not valid");
- return;
- }
-
- // check for tunnel end points
- if (!(tunnel.src() instanceof IpTunnelEndPoint) || !(tunnel.dst() instanceof IpTunnelEndPoint)) {
- log.error("Tunnel source or destination is not valid");
- return;
- }
-
- PcepClient pc = pcepClientController.getClient(PccId.pccId(((IpElementId) srcElement).ipAddress()));
-
- if (!(pc instanceof PcepClient)) {
- log.error("There is no PCC connected with ip addresss {}"
- + ((IpElementId) srcElement).ipAddress().toString());
- return;
- }
- pcepReleaseTunnel(tunnel, pc);
- }
-
- @Override
- public void updateTunnel(Tunnel tunnel, Path path) {
- if (tunnel.type() != Tunnel.Type.MPLS) {
- log.error("Tunnel Type MPLS is only supported");
- return;
- }
-
- // check for tunnel end points
- if (!(tunnel.src() instanceof IpTunnelEndPoint) || !(tunnel.dst() instanceof IpTunnelEndPoint)) {
- log.error("Tunnel source or destination is not valid");
- return;
- }
-
- PcepClient pc = pcepClientController.getClient(PccId.pccId(((IpTunnelEndPoint) tunnel.src()).ip()));
-
- if (!(pc instanceof PcepClient)) {
- log.error("There is no PCC connected with ip addresss {}"
- + ((IpTunnelEndPoint) tunnel.src()).ip().toString());
- return;
- }
- pcepUpdateTunnel(tunnel, path, pc);
- }
-
- @Override
- public void updateTunnel(ElementId srcElement, Tunnel tunnel, Path path) {
-
- if (tunnel.type() != Tunnel.Type.MPLS) {
- log.error("Tunnel Type MPLS is only supported");
- return;
- }
-
- if (!(srcElement instanceof IpElementId)) {
- log.error("Element id is not valid");
- return;
- }
-
- // check for tunnel end points
- if (!(tunnel.src() instanceof IpTunnelEndPoint) || !(tunnel.dst() instanceof IpTunnelEndPoint)) {
- log.error("Tunnel source or destination is not valid");
- return;
- }
-
- PcepClient pc = pcepClientController.getClient(PccId.pccId(((IpElementId) srcElement).ipAddress()));
-
- if (!(pc instanceof PcepClient)) {
- log.error("There is no PCC connected with ip addresss {}"
- + ((IpElementId) srcElement).ipAddress().toString());
- return;
- }
- pcepUpdateTunnel(tunnel, path, pc);
- }
-
- @Override
- public TunnelId tunnelAdded(TunnelDescription tunnel) {
- if (tunnel.type() == Tunnel.Type.MPLS) {
- pcepTunnelAPIMapper.removeFromCoreTunnelRequestQueue(tunnel.id());
- return service.tunnelAdded(tunnel);
- }
-
- long bandwidth = Long
- .parseLong(tunnel.annotations().value("bandwidth"));
-
- if (bandwidth < MIN_BANDWIDTH || bandwidth > MAX_BANDWIDTH) {
- error("Update failed, invalid bandwidth.");
- return null;
- }
-
- // endpoints
- OpticalTunnelEndPoint src = (org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint) tunnel
- .src();
- OpticalTunnelEndPoint dst = (OpticalTunnelEndPoint) tunnel.dst();
- // devices
- DeviceId srcId = (DeviceId) src.elementId().get();
- DeviceId dstId = (DeviceId) dst.elementId().get();
-
- // ports
- long srcPort = src.portNumber().get().toLong();
- long dstPort = dst.portNumber().get().toLong();
-
- // type
- if (tunnel.type() != Tunnel.Type.VLAN) {
- error("Illegal tunnel type. Only support VLAN tunnel creation.");
- return null;
- }
-
- PcepTunnel pcepTunnel = controller.applyTunnel(srcId, dstId, srcPort,
- dstPort, bandwidth,
- tunnel.tunnelName()
- .value());
-
- checkNotNull(pcepTunnel, TUNNLE_NOT_NULL);
- TunnelDescription tunnelAdded = buildOpticalTunnel(pcepTunnel, null);
- TunnelId tunnelId = service.tunnelAdded(tunnelAdded);
-
- tunnelMap.put(String.valueOf(pcepTunnel.id()), tunnelId);
- return tunnelId;
- }
-
- @Override
- public void tunnelRemoved(TunnelDescription tunnel) {
- if (tunnel.type() == Tunnel.Type.MPLS) {
- pcepTunnelAPIMapper.removeFromCoreTunnelRequestQueue(tunnel.id());
- service.tunnelRemoved(tunnel);
- }
-
- Tunnel tunnelOld = tunnelQueryById(tunnel.id());
- checkNotNull(tunnelOld, "The tunnel id is not exsited.");
- if (tunnelOld.type() != Tunnel.Type.VLAN) {
- error("Illegal tunnel type. Only support VLAN tunnel deletion.");
- return;
- }
- String pcepTunnelId = getPCEPTunnelKey(tunnel.id());
- checkNotNull(pcepTunnelId, "The tunnel id is not exsited.");
- if (!controller.deleteTunnel(pcepTunnelId)) {
- error("Delete tunnel failed, Maybe some devices have been disconnected.");
- return;
- }
- tunnelMap.remove(pcepTunnelId);
- service.tunnelRemoved(tunnel);
- }
-
- @Override
- public void tunnelUpdated(TunnelDescription tunnel) {
- if (tunnel.type() == Tunnel.Type.MPLS) {
- pcepTunnelAPIMapper.removeFromCoreTunnelRequestQueue(tunnel.id());
- service.tunnelUpdated(tunnel);
- }
-
- Tunnel tunnelOld = tunnelQueryById(tunnel.id());
- if (tunnelOld.type() != Tunnel.Type.VLAN) {
- error("Illegal tunnel type. Only support VLAN tunnel update.");
- return;
- }
- long bandwidth = Long
- .parseLong(tunnel.annotations().value("bandwidth"));
- if (bandwidth < MIN_BANDWIDTH || bandwidth > MAX_BANDWIDTH) {
- error("Update failed, invalid bandwidth.");
- return;
- }
- String pcepTunnelId = getPCEPTunnelKey(tunnel.id());
-
- checkNotNull(pcepTunnelId, "Invalid tunnel id");
- if (!controller.updateTunnelBandwidth(pcepTunnelId, bandwidth)) {
-
- error("Update failed,maybe invalid bandwidth.");
- return;
-
- }
- service.tunnelUpdated(tunnel);
- }
-
- private void error(String info) {
- System.err.println(info);
- }
-
- // Short-hand for creating a connection point.
- private ConnectPoint connectPoint(PcepDpid id, long port) {
- return new ConnectPoint(deviceId(uri(id)), portNumber(port));
- }
-
- // Short-hand for creating a link.
- private Link link(PcepDpid src, long sp, PcepDpid dst, long dp) {
- return new DefaultLink(id(), connectPoint(src, sp), connectPoint(dst,
- dp),
- Link.Type.TUNNEL);
- }
-
- // Creates a path that leads through the given devices.
- private Path createPath(List<PcepHopNodeDescription> hopList,
- PATHTYPE pathtype, PathState pathState) {
- if (hopList == null || hopList.size() == 0) {
- return null;
- }
- List<Link> links = new ArrayList<>();
- for (int i = 1; i < hopList.size() - 1; i = i + 2) {
- links.add(link(hopList.get(i).getDeviceId(), hopList.get(i)
- .getPortNum(), hopList.get(i + 1).getDeviceId(), hopList
- .get(i + 1).getPortNum()));
- }
-
- int hopNum = hopList.size() - 2;
- DefaultAnnotations extendAnnotations = DefaultAnnotations.builder()
- .set("pathNum", String.valueOf(hopNum))
- .set("pathState", String.valueOf(pathState))
- .set("pathType", String.valueOf(pathtype)).build();
- return new DefaultPath(id(), links, hopNum, extendAnnotations);
- }
-
- // convert the path description to a string.
- public String pathToString(List<Link> links) {
- StringBuilder builder = new StringBuilder();
- builder.append("{");
- for (Link link : links) {
- builder.append("(Device:" + link.src().deviceId() + " Port:"
- + link.src().port().toLong());
- builder.append(" Device:" + link.dst().deviceId() + " Port:"
- + link.dst().port().toLong());
- builder.append(")");
- }
- builder.append("}");
- return builder.toString();
- }
-
- // build a TunnelDescription.
- private TunnelDescription buildOpticalTunnel(PcepTunnel pcepTunnel,
- TunnelId tunnelId) {
- TunnelEndPoint srcPoint = null;
- TunnelEndPoint dstPoint = null;
- Tunnel.Type tunnelType = null;
- TunnelName name = TunnelName.tunnelName(pcepTunnel.name());
-
- // add path after codes of tunnel's path merged
- Path path = createPath(pcepTunnel.getHopList(),
- pcepTunnel.getPathType(),
- pcepTunnel.getPathState());
-
- OpticalTunnelEndPoint.Type endPointType = null;
- switch (pcepTunnel.type()) {
- case OCH:
- tunnelType = Tunnel.Type.OCH;
- endPointType = OpticalTunnelEndPoint.Type.LAMBDA;
- break;
-
- case OTN:
- tunnelType = Tunnel.Type.ODUK;
- endPointType = OpticalTunnelEndPoint.Type.TIMESLOT;
- break;
-
- case UNI:
- tunnelType = Tunnel.Type.VLAN;
- endPointType = null;
- break;
-
- default:
- break;
- }
- DeviceId srcDid = deviceId(uri(pcepTunnel.srcDeviceID()));
- DeviceId dstDid = deviceId(uri(pcepTunnel.dstDeviceId()));
- PortNumber srcPort = PortNumber.portNumber(pcepTunnel.srcPort());
- PortNumber dstPort = PortNumber.portNumber(pcepTunnel.dstPort());
-
- srcPoint = new DefaultOpticalTunnelEndPoint(id(), Optional.of(srcDid),
- Optional.of(srcPort), null,
- endPointType,
- OpticalLogicId.logicId(0),
- true);
- dstPoint = new DefaultOpticalTunnelEndPoint(id(), Optional.of(dstDid),
- Optional.of(dstPort), null,
- endPointType,
- OpticalLogicId.logicId(0),
- true);
-
- // basic annotations
- DefaultAnnotations annotations = DefaultAnnotations
- .builder()
- .set("SLA", String.valueOf(pcepTunnel.getSla()))
- .set("bandwidth",
- String.valueOf(pcepTunnel.bandWidth()) + BANDWIDTH_UINT)
- .set("index", String.valueOf(pcepTunnel.id())).build();
-
- // a VLAN tunnel always carry OCH tunnel, this annotation is the index
- // of a OCH tunnel.
- if (pcepTunnel.underlayTunnelId() != 0) {
- DefaultAnnotations extendAnnotations = DefaultAnnotations
- .builder()
- .set("underLayTunnelIndex",
- String.valueOf(pcepTunnel.underlayTunnelId())).build();
- annotations = DefaultAnnotations.merge(annotations,
- extendAnnotations);
-
- }
- TunnelDescription tunnel = new DefaultTunnelDescription(
- tunnelId,
- srcPoint,
- dstPoint,
- tunnelType,
- new DefaultGroupId(
- 0),
- id(), name,
- path,
- annotations);
- return tunnel;
-
- }
-
- /**
- * Get the tunnelID according to the tunnel key.
- *
- * @param tunnelKey tunnel key
- * @return corresponding tunnel id of the a tunnel key.
- */
- private TunnelId getTunnelId(String tunnelKey) {
- for (String key : tunnelMap.keySet()) {
- if (key.equals(tunnelKey)) {
- return tunnelMap.get(key);
- }
- }
- return null;
- }
-
- /**
- * Get the tunnel key according to the tunnelID.
- *
- * @param tunnelId tunnel id
- * @return corresponding a tunnel key of the tunnel id.
- */
- private String getPCEPTunnelKey(TunnelId tunnelId) {
- for (String key : tunnelMap.keySet()) {
- if (tunnelMap.get(key).id() == tunnelId.id()) {
- return key;
- }
- }
- return null;
-
- }
-
- /**
- * Build a DefaultTunnelStatistics from a PcepTunnelStatistics.
- *
- * @param statistics statistics data from a PCEP tunnel
- * @return TunnelStatistics
- */
- private TunnelStatistics buildTunnelStatistics(PcepTunnelStatistics statistics) {
- DefaultTunnelStatistics.Builder builder = new DefaultTunnelStatistics.Builder();
- DefaultTunnelStatistics tunnelStatistics = builder.setBwUtilization(statistics.bandwidthUtilization())
- .setPacketLossRatio(statistics.packetLossRate())
- .setFlowDelay(statistics.flowDelay())
- .setAlarms(statistics.alarms())
- .build();
- return tunnelStatistics;
- }
- /**
- * Creates list of hops for ERO object from Path.
- *
- * @param path network path
- * @return list of ipv4 subobjects
- */
- private LinkedList<PcepValueType> createPcepPath(Path path) {
- LinkedList<PcepValueType> llSubObjects = new LinkedList<PcepValueType>();
- List<Link> listLink = path.links();
- ConnectPoint source = null;
- ConnectPoint destination = null;
- IpAddress ipDstAddress = null;
- IpAddress ipSrcAddress = null;
- PcepValueType subObj = null;
-
- for (Link link : listLink) {
- source = link.src();
- if (!(source.equals(destination))) {
- //set IPv4SubObject for ERO object
- ipSrcAddress = source.ipElementId().ipAddress();
- subObj = new IPv4SubObject(ipSrcAddress.getIp4Address().toInt());
- llSubObjects.add(subObj);
- }
-
- destination = link.dst();
- ipDstAddress = destination.ipElementId().ipAddress();
- subObj = new IPv4SubObject(ipDstAddress.getIp4Address().toInt());
- llSubObjects.add(subObj);
- }
- return llSubObjects;
- }
-
- /**
- * Creates PcInitiated lsp request list for setup tunnel.
- *
- * @param tunnel mpls tunnel
- * @param path network path
- * @param pc pcep client
- * @param srpId unique id for pcep message
- * @return list of PcInitiatedLspRequest
- * @throws PcepParseException while building pcep objects fails
- */
- LinkedList<PcInitiatedLspRequest> createPcInitiatedLspReqList(Tunnel tunnel, Path path,
- PcepClient pc, int srpId)
- throws PcepParseException {
- PcepValueType tlv;
- LinkedList<PcepValueType> llSubObjects = createPcepPath(path);
-
- if (llSubObjects == null || llSubObjects.size() == 0) {
- log.error("There is no link information to create tunnel");
- return null;
- }
-
- //build SRP object
- PcepSrpObject srpobj = pc.factory().buildSrpObject().setSrpID(srpId).setRFlag(false).build();
-
- LinkedList<PcepValueType> llOptionalTlv = new LinkedList<PcepValueType>();
- LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList = new LinkedList<PcInitiatedLspRequest>();
- // set LSP identifiers TLV
- tlv = new StatefulIPv4LspIdentidiersTlv((((IpTunnelEndPoint) tunnel.src()).ip().getIp4Address().toInt()),
- (short) 0, (short) 0, 0,
- (((IpTunnelEndPoint) tunnel.dst()).ip().getIp4Address().toInt()));
- llOptionalTlv.add(tlv);
- //set SymbolicPathNameTlv of LSP object
- tlv = new SymbolicPathNameTlv(tunnel.tunnelName().value().getBytes());
- llOptionalTlv.add(tlv);
-
- //build LSP object
- PcepLspObject lspobj = pc.factory().buildLspObject().setAFlag(true).setOFlag((byte) 0).setPlspId(0)
- .setOptionalTlv(llOptionalTlv).build();
-
- //build ENDPOINTS object
- PcepEndPointsObject endpointsobj = pc.factory().buildEndPointsObject()
- .setSourceIpAddress(((IpTunnelEndPoint) tunnel.src()).ip().getIp4Address().toInt())
- .setDestIpAddress(((IpTunnelEndPoint) tunnel.dst()).ip().getIp4Address().toInt())
- .setPFlag(true).build();
-
- //build ERO object
- PcepEroObject eroobj = pc.factory().buildEroObject().setSubObjects(llSubObjects).build();
-
- int iBandwidth = DEFAULT_BANDWIDTH_VALUE;
- if (tunnel.annotations().value("bandwidth") != null) {
- iBandwidth = Integer.parseInt(tunnel.annotations().value("bandwidth"));
- }
- // build bandwidth object
- PcepBandwidthObject bandwidthObject = pc.factory().buildBandwidthObject().setBandwidth(iBandwidth).build();
- // build pcep attribute
- PcepAttribute pcepAttribute = pc.factory().buildPcepAttribute().setBandwidthObject(bandwidthObject).build();
-
- PcInitiatedLspRequest initiateLspRequest = pc.factory().buildPcInitiatedLspRequest().setSrpObject(srpobj)
- .setLspObject(lspobj).setEndPointsObject(endpointsobj).setEroObject(eroobj)
- .setPcepAttribute(pcepAttribute).build();
- llPcInitiatedLspRequestList.add(initiateLspRequest);
- return llPcInitiatedLspRequestList;
- }
-
- /**
- * To send initiate tunnel message to pcc.
- *
- * @param tunnel mpls tunnel info
- * @param path explicit route for the tunnel
- * @param pc pcep client to send message
- */
- private void pcepSetupTunnel(Tunnel tunnel, Path path, PcepClient pc) {
- try {
- int srpId = SrpIdGenerators.create();
- PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.CREATE);
-
- pcepTunnelAPIMapper.addToCoreTunnelRequestQueue(pcepTunnelData);
-
- LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList = createPcInitiatedLspReqList(tunnel, path,
- pc, srpId);
- if (llPcInitiatedLspRequestList == null || llPcInitiatedLspRequestList.size() == 0) {
- log.error("Failed to create PcInitiatedLspRequestList");
- return;
- }
-
- //build PCInitiate message
- PcepInitiateMsg pcInitiateMsg = pc.factory().buildPcepInitiateMsg()
- .setPcInitiatedLspRequestList(llPcInitiatedLspRequestList)
- .build();
-
- pc.sendMessage(Collections.singletonList(pcInitiateMsg));
-
- pcepTunnelAPIMapper.addToTunnelRequestQueue(srpId, pcepTunnelData);
- } catch (PcepParseException e) {
- log.error("PcepParseException occurred while processing setup tunnel {}", e.getMessage());
- }
- }
-
- /**
- * To send Release tunnel message to pcc.
- *
- * @param tunnel mpls tunnel info
- * @param pc pcep client to send message
- */
- private void pcepReleaseTunnel(Tunnel tunnel, PcepClient pc) {
- try {
- PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, RequestType.DELETE);
- pcepTunnelAPIMapper.addToCoreTunnelRequestQueue(pcepTunnelData);
- int srpId = SrpIdGenerators.create();
- TunnelId tunnelId = tunnel.tunnelId();
- int plspId = 0;
- StatefulIPv4LspIdentidiersTlv statefulIpv4IndentifierTlv = null;
-
- if (!(pcepTunnelAPIMapper.checkFromTunnelDBQueue(tunnelId))) {
- log.error("Tunnel doesnot exists. Tunnel id {}" + tunnelId.toString());
- return;
- } else {
- PcepTunnelData pcepTunnelDbData = pcepTunnelAPIMapper.getDataFromTunnelDBQueue(tunnelId);
- plspId = pcepTunnelDbData.plspId();
- statefulIpv4IndentifierTlv = pcepTunnelDbData.statefulIpv4IndentifierTlv();
- }
- // build srp object
- PcepSrpObject srpobj = pc.factory().buildSrpObject().setSrpID(srpId).setRFlag(true).build();
-
- PcepValueType tlv;
- LinkedList<PcepValueType> llOptionalTlv = new LinkedList<PcepValueType>();
- LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList = new LinkedList<PcInitiatedLspRequest>();
-
- if (statefulIpv4IndentifierTlv != null) {
- tlv = statefulIpv4IndentifierTlv;
- } else {
- tlv = new StatefulIPv4LspIdentidiersTlv((
- ((IpTunnelEndPoint) tunnel.src()).ip().getIp4Address().toInt()),
- (short) 0, (short) 0, 0,
- (((IpTunnelEndPoint) tunnel.dst()).ip().getIp4Address().toInt()));
- }
- llOptionalTlv.add(tlv);
- tlv = new SymbolicPathNameTlv(tunnel.tunnelName().value().getBytes());
- llOptionalTlv.add(tlv);
- // build lsp object, set r flag as false to delete the tunnel
- PcepLspObject lspobj = pc.factory().buildLspObject().setRFlag(false).setPlspId(plspId)
- .setOptionalTlv(llOptionalTlv).build();
-
- PcInitiatedLspRequest releaseLspRequest = pc.factory().buildPcInitiatedLspRequest().setSrpObject(srpobj)
- .setLspObject(lspobj).build();
-
- llPcInitiatedLspRequestList.add(releaseLspRequest);
-
- PcepInitiateMsg pcInitiateMsg = pc.factory().buildPcepInitiateMsg()
- .setPcInitiatedLspRequestList(llPcInitiatedLspRequestList).build();
-
- pc.sendMessage(Collections.singletonList(pcInitiateMsg));
-
- pcepTunnelAPIMapper.addToTunnelRequestQueue(srpId, pcepTunnelData);
- } catch (PcepParseException e) {
- log.error("PcepParseException occurred while processing release tunnel {}", e.getMessage());
- }
- }
-
- /**
- * To send Update tunnel request message to pcc.
- *
- * @param tunnel mpls tunnel info
- * @param path explicit route for the tunnel
- * @param pc pcep client to send message
- */
- private void pcepUpdateTunnel(Tunnel tunnel, Path path, PcepClient pc) {
- try {
- PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.UPDATE);
- pcepTunnelAPIMapper.addToCoreTunnelRequestQueue(pcepTunnelData);
- int srpId = SrpIdGenerators.create();
- TunnelId tunnelId = tunnel.tunnelId();
- PcepValueType tlv;
- int plspId = 0;
-
- LinkedList<PcepValueType> llSubObjects = createPcepPath(path);
- LinkedList<PcepValueType> llOptionalTlv = new LinkedList<PcepValueType>();
- LinkedList<PcepUpdateRequest> llUpdateRequestList = new LinkedList<PcepUpdateRequest>();
-
- //build SRP object
- PcepSrpObject srpobj = pc.factory().buildSrpObject().setSrpID(srpId).setRFlag(false).build();
-
- if (!(pcepTunnelAPIMapper.checkFromTunnelDBQueue(tunnelId))) {
- log.error("Tunnel doesnot exists in DB");
- return;
- } else {
- PcepTunnelData pcepTunnelDBData = pcepTunnelAPIMapper.getDataFromTunnelDBQueue(tunnelId);
- plspId = pcepTunnelDBData.plspId();
- }
-
- tlv = new StatefulIPv4LspIdentidiersTlv((((IpTunnelEndPoint) tunnel.src()).ip().getIp4Address().toInt()),
- (short) 0, (short) 0, 0,
- (((IpTunnelEndPoint) tunnel.dst()).ip().getIp4Address().toInt()));
- llOptionalTlv.add(tlv);
-
- if (tunnel.tunnelName().value() != null) {
- tlv = new SymbolicPathNameTlv(tunnel.tunnelName().value().getBytes());
- llOptionalTlv.add(tlv);
- }
-
- // build lsp object
- PcepLspObject lspobj = pc.factory().buildLspObject().setAFlag(true).setPlspId(plspId)
- .setOptionalTlv(llOptionalTlv).build();
- // build ero object
- PcepEroObject eroobj = pc.factory().buildEroObject().setSubObjects(llSubObjects).build();
-
- int iBandwidth = DEFAULT_BANDWIDTH_VALUE;
- if (tunnel.annotations().value("bandwidth") != null) {
- iBandwidth = Integer.parseInt(tunnel.annotations().value("bandwidth"));
- }
- // build bandwidth object
- PcepBandwidthObject bandwidthObject = pc.factory().buildBandwidthObject().setBandwidth(iBandwidth).build();
- // build pcep attribute
- PcepAttribute pcepAttribute = pc.factory().buildPcepAttribute().setBandwidthObject(bandwidthObject).build();
- // build pcep msg path
- PcepMsgPath msgPath = pc.factory().buildPcepMsgPath().setEroObject(eroobj).setPcepAttribute(pcepAttribute)
- .build();
-
- PcepUpdateRequest updateRequest = pc.factory().buildPcepUpdateRequest().setSrpObject(srpobj)
- .setLspObject(lspobj).setMsgPath(msgPath).build();
-
- llUpdateRequestList.add(updateRequest);
-
- PcepUpdateMsg pcUpdateMsg = pc.factory().buildUpdateMsg().setUpdateRequestList(llUpdateRequestList).build();
-
- pc.sendMessage(Collections.singletonList(pcUpdateMsg));
- pcepTunnelAPIMapper.addToTunnelRequestQueue(srpId, pcepTunnelData);
- } catch (PcepParseException e) {
- log.error("PcepParseException occurred while processing release tunnel {}", e.getMessage());
- }
- }
-
-
-
- private class InnerTunnelProvider implements PcepTunnelListener, PcepEventListener, PcepClientListener {
-
- @Override
- public void handlePCEPTunnel(PcepTunnel pcepTunnel) {
- TunnelDescription tunnel = null;
- // instance and id identify a tunnel together
- String tunnelKey = String.valueOf(pcepTunnel.getInstance())
- + String.valueOf(pcepTunnel.id());
-
- if (tunnelKey == null || "".equals(tunnelKey)) {
- log.error("Invalid PCEP tunnel");
- return;
- }
-
- TunnelId tunnelId = getTunnelId(tunnelKey);
-
- tunnel = buildOpticalTunnel(pcepTunnel, tunnelId);
-
- OperationType operType = pcepTunnel.getOperationType();
- switch (operType) {
- case ADD:
- tunnelId = service.tunnelAdded(tunnel);
- tunnelMap.put(tunnelKey, tunnelId);
- break;
-
- case UPDATE:
- service.tunnelUpdated(tunnel);
- break;
-
- case DELETE:
- service.tunnelRemoved(tunnel);
- tunnelMap.remove(tunnelKey);
- break;
-
- default:
- log.error("Invalid tunnel operation");
- }
- }
-
- @Override
- public void handleMessage(PccId pccId, PcepMessage msg) {
- try {
- log.debug("tunnel provider handle message {}", msg.getType().toString());
- switch (msg.getType()) {
- case REPORT:
- int srpId = 0;
- LinkedList<PcepStateReport> llStateReportList = null;
- llStateReportList = ((PcepReportMsg) msg).getStateReportList();
- ListIterator<PcepStateReport> listIterator = llStateReportList.listIterator();
- PcepSrpObject srpObj = null;
- PcepLspObject lspObj = null;
- while (listIterator.hasNext()) {
- PcepStateReport stateRpt = listIterator.next();
- srpObj = stateRpt.getSrpObject();
- lspObj = stateRpt.getLspObject();
-
- if (srpObj instanceof PcepSrpObject) {
- srpId = srpObj.getSrpID();
- }
-
- log.debug("Plsp ID in handle message " + lspObj.getPlspId());
- log.debug("SRP ID in handle message " + srpId);
-
- if (!(pcepTunnelAPIMapper.checkFromTunnelRequestQueue(srpId))) {
-
- // Check the sync status
- if (lspObj.getSFlag()) {
- handleSyncReport(stateRpt);
- } else if (!pcepClientController.getClient(pccId).isSyncComplete()) {
- // sync is done
- pcepClientController.getClient(pccId).setIsSyncComplete(true);
- }
- continue;
- }
-
- handleReportMessage(srpId, lspObj);
- }
- break;
-
- default:
- log.debug("Received unsupported message type {}", msg.getType().toString());
- }
- } catch (Exception e) {
- log.error("Exception occured while processing report message {}", e.getMessage());
- }
- }
-
- /**
- * Handles report message for setup/update/delete tunnel request.
- *
- * @param srpId unique identifier for pcep message
- * @param lspObj lsp object
- */
- private void handleReportMessage(int srpId, PcepLspObject lspObj) {
- ProviderId providerId = new ProviderId("pcep", PROVIDER_ID);
- PcepTunnelData pcepTunnelData = pcepTunnelAPIMapper.getDataFromTunnelRequestQueue(srpId);
- SparseAnnotations annotations = (SparseAnnotations) pcepTunnelData.tunnel().annotations();
-
- // store the values required from report message
- pcepTunnelData.setPlspId(lspObj.getPlspId());
- pcepTunnelData.setLspAFlag(lspObj.getAFlag());
- pcepTunnelData.setLspOFlag(lspObj.getOFlag());
- pcepTunnelData.setLspDFlag(lspObj.getDFlag());
-
- StatefulIPv4LspIdentidiersTlv ipv4LspTlv = null;
- ListIterator<PcepValueType> listTlvIterator = lspObj.getOptionalTlv().listIterator();
- while (listTlvIterator.hasNext()) {
- PcepValueType tlv = listTlvIterator.next();
- if (tlv.getType() == StatefulIPv4LspIdentidiersTlv.TYPE) {
- ipv4LspTlv = (StatefulIPv4LspIdentidiersTlv) tlv;
- break;
- }
- }
- if (ipv4LspTlv != null) {
- pcepTunnelData.setStatefulIpv4IndentifierTlv(ipv4LspTlv);
- }
-
- Path path = pcepTunnelData.path();
- Tunnel tunnel = pcepTunnelData.tunnel();
- DefaultTunnelDescription td = new DefaultTunnelDescription(tunnel.tunnelId(), tunnel.src(),
- tunnel.dst(), tunnel.type(), tunnel.groupId(),
- providerId, tunnel.tunnelName(), path,
- annotations);
-
- if (RequestType.CREATE == pcepTunnelData.requestType()) {
- log.debug("Report received for create request");
-
- pcepTunnelAPIMapper.handleCreateTunnelRequestQueue(srpId, pcepTunnelData);
- if (0 == lspObj.getOFlag()) {
- log.warn("The tunnel is in down state");
- }
- tunnelAdded(td);
- }
- if (RequestType.DELETE == pcepTunnelData.requestType()) {
- log.debug("Report received for delete request");
- pcepTunnelAPIMapper.handleRemoveFromTunnelRequestQueue(srpId, pcepTunnelData);
- tunnelRemoved(td);
- }
-
- if (RequestType.UPDATE == pcepTunnelData.requestType()) {
- log.debug("Report received for update request");
- pcepTunnelData.setRptFlag(true);
- pcepTunnelAPIMapper.addToTunnelIdMap(pcepTunnelData);
- pcepTunnelAPIMapper.handleUpdateTunnelRequestQueue(srpId, pcepTunnelData);
-
- if (0 == lspObj.getOFlag()) {
- log.warn("The tunnel is in down state");
- }
- if (!(pcepTunnelAPIMapper.checkFromTunnelRequestQueue(srpId))) {
- tunnelUpdated(td);
- }
- }
- }
-
- /**
- * Handles sync report received from pcc.
- *
- * @param stateRpt pcep state report
- */
- private void handleSyncReport(PcepStateReport stateRpt) {
- PcepLspObject lspObj = stateRpt.getLspObject();
- PcepStateReport.PcepMsgPath msgPath = stateRpt.getMsgPath();
- checkNotNull(msgPath);
- PcepRroObject rroObj = msgPath.getRroObject();
- if (rroObj == null) {
- log.debug("RRO object is null in sate report");
- return;
- }
- int bandwidth = 0;
-
- log.debug("Handle Sync report received from PCC.");
-
- if (0 == lspObj.getOFlag()) {
- log.warn("The PCC reported tunnel is in down state");
- }
- log.debug("Sync report received");
-
- if (msgPath.getBandwidthObject() != null) {
- bandwidth = msgPath.getBandwidthObject().getBandwidth();
- }
-
- buildAndStorePcepTunnelData(lspObj, rroObj, bandwidth);
- }
-
- /**
- * To build Path in network from RRO object.
- *
- * @param rroObj rro object
- * @param providerId provider id
- * @return path object
- */
- private Path buildPathFromRroObj(PcepRroObject rroObj, ProviderId providerId) {
- checkNotNull(rroObj);
- List<Link> links = new ArrayList<Link>();
- LinkedList<PcepValueType> llSubObj = rroObj.getSubObjects();
- if (0 == llSubObj.size()) {
- log.error("RRO in report message does not have hop information");
- }
- ListIterator<PcepValueType> tlvIterator = llSubObj.listIterator();
-
- ConnectPoint src = null;
- ConnectPoint dst = null;
- boolean isSrcSet = false;
- while (tlvIterator.hasNext()) {
- PcepValueType subObj = tlvIterator.next();
- switch (subObj.getType()) {
-
- case IPv4SubObject.TYPE:
-
- IPv4SubObject ipv4SubObj = (IPv4SubObject) subObj;
- if (!isSrcSet) {
- IpAddress srcIp = IpAddress.valueOf(ipv4SubObj.getIpAddress());
- src = new ConnectPoint(IpElementId.ipElement(srcIp), PortNumber.portNumber(0));
- isSrcSet = true;
- } else {
- IpAddress dstIp = IpAddress.valueOf(ipv4SubObj.getIpAddress());
- dst = new ConnectPoint(IpElementId.ipElement(dstIp), PortNumber.portNumber(0));
- Link link = new DefaultLink(providerId, src, dst, Link.Type.DIRECT, EMPTY);
- links.add(link);
- src = dst;
- }
- break;
- default:
- // the other sub objects are not required
- }
- }
- return new DefaultPath(providerId, links, 0, EMPTY);
- }
-
- /**
- * To build pcepTunnelData and informs core about the pcc reported tunnel.
- *
- * @param lspObj pcep lsp object
- * @param rroObj pcep rro object
- * @param bandwidth bandwidth of tunnel
- */
- private void buildAndStorePcepTunnelData(PcepLspObject lspObj, PcepRroObject rroObj,
- int bandwidth) {
-
- ProviderId providerId = new ProviderId("pcep", PROVIDER_ID);
-
- // StatefulIPv4LspIdentidiersTlv in LSP object will have the source and destination address.
- StatefulIPv4LspIdentidiersTlv lspIdenTlv = null;
- SymbolicPathNameTlv pathNameTlv = null;
- LinkedList<PcepValueType> llOptionalTlv = lspObj.getOptionalTlv();
- ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
- while (listIterator.hasNext()) {
- PcepValueType tlv = listIterator.next();
- switch (tlv.getType()) {
- case StatefulIPv4LspIdentidiersTlv.TYPE:
- lspIdenTlv = (StatefulIPv4LspIdentidiersTlv) tlv;
- break;
- case SymbolicPathNameTlv.TYPE:
- pathNameTlv = (SymbolicPathNameTlv) tlv;
- break;
- default:
- // currently this tlv is not required
- }
- }
-
- IpTunnelEndPoint tunnelEndPointSrc;
- tunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(IpAddress.valueOf(lspIdenTlv.getIpv4IngressAddress()));
- IpTunnelEndPoint tunnelEndPointDst;
- tunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(IpAddress.valueOf(lspIdenTlv.getIpv4EgressAddress()));
-
- Path path = buildPathFromRroObj(rroObj, providerId);
-
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("bandwidth", (new Integer(bandwidth)).toString())
- .build();
-
- DefaultTunnelDescription td = new DefaultTunnelDescription(null, tunnelEndPointSrc,
- tunnelEndPointDst, Tunnel.Type.MPLS,
- new DefaultGroupId(0), providerId,
- TunnelName.tunnelName(pathNameTlv.toString()),
- path, annotations);
- TunnelId tId = tunnelAdded(td);
-
- Tunnel tunnel = new DefaultTunnel(providerId, tunnelEndPointSrc, tunnelEndPointDst, Tunnel.Type.MPLS,
- new DefaultGroupId(0), tId,
- TunnelName.tunnelName(pathNameTlv.toString()), path, annotations);
-
- PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.LSP_STATE_RPT);
- pcepTunnelData.setStatefulIpv4IndentifierTlv(lspIdenTlv);
- pcepTunnelAPIMapper.addPccTunnelDB(pcepTunnelData);
- pcepTunnelAPIMapper.addToTunnelIdMap(pcepTunnelData);
- }
-
- @Override
- public void clientConnected(PccId pccId) {
- // TODO
- }
-
- @Override
- public void clientDisconnected(PccId pccId) {
- // TODO
- }
-
-
-
- @Override
- public void handlePcepTunnelStatistics(PcepTunnelStatistics pcepTunnelStatistics) {
- TunnelId id = getTunnelId(String.valueOf(pcepTunnelStatistics.id()));
- TunnelStatistics tunnelStatistics = buildTunnelStatistics(pcepTunnelStatistics);
- tunnelStatisticsMap.put(id, tunnelStatistics);
- }
- }
-
- @Override
- public Tunnel tunnelQueryById(TunnelId tunnelId) {
- return service.tunnelQueryById(tunnelId);
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/RequestType.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/RequestType.java
deleted file mode 100644
index 51854451..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/RequestType.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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;
-
-/**
- * Enum of request types between pcc and pcep.
- */
-public enum RequestType {
- /**
- * Specifies the request type for PCC is to create new tunnel.
- */
- CREATE,
-
- /**
- * Specifies the request type for PCC is to update existing tunnel.
- */
- UPDATE,
-
- /**
- * Specifies the request type for PCC is to delete existing tunnel.
- */
- DELETE,
-
- /**
- * Specifies the request type for PCC to report existing tunnel.
- */
- LSP_STATE_RPT;
-} \ No newline at end of file
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/SrpIdGenerators.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/SrpIdGenerators.java
deleted file mode 100644
index 5b5a5fb2..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/SrpIdGenerators.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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 static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.slf4j.Logger;
-
-/**
- * Unique Srp Id generator for pcep messages.
- */
-public final class SrpIdGenerators {
-
- private static final Logger log = getLogger(SrpIdGenerators.class);
- private static final AtomicInteger SRP_ID_GEN = new AtomicInteger();
- private static final int MAX_SRP_ID = 0x7FFFFFFF;
- private static int srpId;
-
- /**
- * Default constructor.
- */
- private SrpIdGenerators() {
- }
-
- /**
- * Get the next srp id.
- *
- * @return srp id
- */
- public static int create() {
- do {
- if (srpId >= MAX_SRP_ID) {
- if (SRP_ID_GEN.get() >= MAX_SRP_ID) {
- SRP_ID_GEN.set(0);
- }
- }
- srpId = SRP_ID_GEN.incrementAndGet();
- } while (srpId > MAX_SRP_ID);
- return srpId;
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
deleted file mode 100644
index cab2bf4c..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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 org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.util.Timer;
-import org.onosproject.pcep.api.PcepController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.TimeUnit;
-
-/*
- * Sends Stats Request and collect the tunnel statistics with a time interval.
- */
-public class TunnelStatsCollector implements TimerTask {
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PcepController controller;
-
- private int refreshInterval;
- private final HashedWheelTimer timer = Timer.getTimer();
-
- private String pcepTunnelId;
- private Timeout timeout;
- private volatile boolean stopped;
-
-
- /**
- * Greate a tunnel status collector object.
- *
- * @param id tunnel whose status data will be collected
- * @param refreshInterval time interval for collecting statistic
- */
- public TunnelStatsCollector(String id, int refreshInterval) {
- this.pcepTunnelId = id;
- this.refreshInterval = refreshInterval;
- }
-
- @Override
- public void run(Timeout timeout) throws Exception {
- if (stopped || timeout.isCancelled()) {
- return;
- }
- log.trace("Collecting stats for {}", pcepTunnelId);
-
- sendTunnelStatistic();
- if (!stopped && !timeout.isCancelled()) {
- log.trace("Scheduling stats collection in {} seconds for {}",
- this.refreshInterval, pcepTunnelId);
- timeout.getTimer().newTimeout(this, refreshInterval, TimeUnit.SECONDS);
- }
-
- }
-
- private void sendTunnelStatistic() {
- controller.getTunnelStatistics(pcepTunnelId);
-
- }
-
- synchronized void adjustPollInterval(int pollInterval) {
- this.refreshInterval = pollInterval;
- }
-
- /**
- * Starts the collector.
- */
- public synchronized void start() {
- log.info("Starting Tunnel Stats collection thread for {}", pcepTunnelId);
- stopped = false;
- timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
- }
-
- /**
- * Stops the collector.
- */
- public synchronized void stop() {
- log.info("Stopping Tunnel Stats collection thread for {}", pcepTunnelId);
- stopped = true;
- timeout.cancel();
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/package-info.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/package-info.java
deleted file mode 100644
index 5074eecb..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-/**
- *Provider that uses PCEP controller as a means of infrastructure tunnel discovery.
- */
-package org.onosproject.provider.pcep.tunnel.impl; \ No newline at end of file
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java
deleted file mode 100644
index 5b010f51..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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 static org.junit.Assert.assertNotNull;
-
-import java.util.List;
-import java.util.concurrent.RejectedExecutionException;
-
-import org.jboss.netty.channel.Channel;
-import org.onosproject.pcep.controller.PccId;
-import org.onosproject.pcep.controller.PcepClient;
-import org.onosproject.pcepio.protocol.PcepFactories;
-import org.onosproject.pcepio.protocol.PcepFactory;
-import org.onosproject.pcepio.protocol.PcepMessage;
-import org.onosproject.pcepio.protocol.PcepVersion;
-
-public class PcepClientAdapter implements PcepClient {
-
- private Channel channel;
- protected String channelId;
-
- private boolean connected;
- private PccId pccId;
-
- private PcepVersion pcepVersion;
-
- public void init(PccId pccId, PcepVersion pcepVersion) {
- this.pccId = pccId;
- this.pcepVersion = pcepVersion;
- }
-
- @Override
- public final void disconnectClient() {
- this.channel.close();
- }
-
- @Override
- public final void sendMessage(PcepMessage m) {
- }
-
- @Override
- public final void sendMessage(List<PcepMessage> msgs) {
- try {
- PcepMessage pcepMsg = msgs.get(0);
- assertNotNull("PCEP MSG should be created.", pcepMsg);
- } catch (RejectedExecutionException e) {
- throw e;
- }
- }
-
- @Override
- public final boolean isConnected() {
- return this.connected;
- }
-
- @Override
- public String channelId() {
- return channelId;
- }
-
- @Override
- public final PccId getPccId() {
- return this.pccId;
- };
-
- @Override
- public final String getStringId() {
- return this.pccId.toString();
- }
-
- @Override
- public final void handleMessage(PcepMessage m) {
- }
-
- @Override
- public boolean isOptical() {
- return false;
- }
-
- @Override
- public PcepFactory factory() {
- return PcepFactories.getFactory(pcepVersion);
- }
-
- @Override
- public final boolean isSyncComplete() {
- return false;
- }
-
- @Override
- public final void setIsSyncComplete(boolean value) {
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
deleted file mode 100644
index 2d2aaafe..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * 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.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.onlab.packet.IpAddress;
-import org.onosproject.pcep.controller.PccId;
-import org.onosproject.pcep.controller.PcepClient;
-import org.onosproject.pcep.controller.PcepClientController;
-import org.onosproject.pcep.controller.PcepClientListener;
-import org.onosproject.pcep.controller.PcepEventListener;
-import org.onosproject.pcep.controller.driver.PcepAgent;
-import org.onosproject.pcepio.protocol.PcepMessage;
-import org.onosproject.pcepio.protocol.PcepVersion;
-
-import com.google.common.collect.Sets;
-
-public class PcepClientControllerAdapter implements PcepClientController {
-
- protected ConcurrentHashMap<PccId, PcepClient> connectedClients =
- new ConcurrentHashMap<PccId, PcepClient>();
-
- protected PcepClientAgent agent = new PcepClientAgent();
- protected Set<PcepClientListener> pcepClientListener = new HashSet<>();
-
- protected Set<PcepEventListener> pcepEventListener = Sets.newHashSet();
-
- @Activate
- public void activate() {
- }
-
- @Deactivate
- public void deactivate() {
- }
-
- @Override
- public Collection<PcepClient> getClients() {
- return connectedClients.values();
- }
-
- @Override
- public PcepClient getClient(PccId pccId) {
- //return connectedClients.get(pccIpAddress);
- PcepClientAdapter pc = new PcepClientAdapter();
- pc.init(PccId.pccId(IpAddress.valueOf(0xac000001)), PcepVersion.PCEP_1);
- return pc;
- }
-
- @Override
- public void addListener(PcepClientListener listener) {
- if (!pcepClientListener.contains(listener)) {
- this.pcepClientListener.add(listener);
- }
- }
-
- @Override
- public void removeListener(PcepClientListener listener) {
- this.pcepClientListener.remove(listener);
- }
-
- @Override
- public void addEventListener(PcepEventListener listener) {
- pcepEventListener.add(listener);
- }
-
- @Override
- public void removeEventListener(PcepEventListener listener) {
- pcepEventListener.remove(listener);
- }
-
- @Override
- public void writeMessage(PccId pccId, PcepMessage msg) {
- this.getClient(pccId).sendMessage(msg);
- }
-
- @Override
- public void processClientMessage(PccId pccId, PcepMessage msg) {
-
- PcepClient pc = getClient(pccId);
-
- switch (msg.getType()) {
- case NONE:
- break;
- case OPEN:
- break;
- case KEEP_ALIVE:
- //log.debug("Sending Keep Alive Message to {" + pccIpAddress.toString() + "}");
- pc.sendMessage(Collections.singletonList(pc.factory().buildKeepaliveMsg().build()));
- break;
- case PATH_COMPUTATION_REQUEST:
- break;
- case PATH_COMPUTATION_REPLY:
- break;
- case NOTIFICATION:
- break;
- case ERROR:
- break;
- case CLOSE:
- //log.debug("Sending Close Message to { }", pccIpAddress.toString());
- pc.sendMessage(Collections.singletonList(pc.factory().buildCloseMsg().build()));
- break;
- case REPORT:
- for (PcepEventListener l : pcepEventListener) {
- l.handleMessage(pccId, msg);
- }
- break;
- case UPDATE:
- for (PcepEventListener l : pcepEventListener) {
- l.handleMessage(pccId, msg);
- }
- break;
- case INITIATE:
- for (PcepEventListener l : pcepEventListener) {
- l.handleMessage(pccId, msg);
- }
- break;
- case LABEL_UPDATE:
- break;
- case MAX:
- break;
- case END:
- break;
- default:
- break;
- }
- }
-
- @Override
- public void closeConnectedClients() {
- PcepClient pc;
- for (PccId id : connectedClients.keySet()) {
- pc = getClient(id);
- pc.disconnectClient();
- }
- }
-
- /**
- * Implementation of an Pcep Agent which is responsible for
- * keeping track of connected clients and the state in which
- * they are.
- */
- public class PcepClientAgent implements PcepAgent {
-
- @Override
- public boolean addConnectedClient(PccId pccId, PcepClient pc) {
-
- if (connectedClients.get(pccId) != null) {
- return false;
- } else {
- connectedClients.put(pccId, pc);
- for (PcepClientListener l : pcepClientListener) {
- l.clientConnected(pccId);
- }
- return true;
- }
- }
-
- @Override
- public boolean validActivation(PccId pccId) {
- if (connectedClients.get(pccId) == null) {
- //log.error("Trying to activate client but is not in "
- // + "connected switches: pccIp {}. Aborting ..", pccIpAddress.toString());
- return false;
- }
-
- return true;
- }
-
- @Override
- public void removeConnectedClient(PccId pccId) {
- connectedClients.remove(pccId);
- for (PcepClientListener l : pcepClientListener) {
- //log.warn("removal for {}", pccIpAddress.toString());
- l.clientDisconnected(pccId);
- }
- }
-
- @Override
- public void processPcepMessage(PccId pccId, PcepMessage m) {
- processClientMessage(pccId, m);
- }
- }
-
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepControllerAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepControllerAdapter.java
deleted file mode 100644
index 65266116..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepControllerAdapter.java
+++ /dev/null
@@ -1,85 +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.provider.pcep.tunnel.impl;
-
-import org.onosproject.net.DeviceId;
-import org.onosproject.pcep.api.PcepController;
-import org.onosproject.pcep.api.PcepDpid;
-import org.onosproject.pcep.api.PcepLinkListener;
-import org.onosproject.pcep.api.PcepSwitch;
-import org.onosproject.pcep.api.PcepSwitchListener;
-import org.onosproject.pcep.api.PcepTunnel;
-import org.onosproject.pcep.api.PcepTunnelListener;
-
-public class PcepControllerAdapter implements PcepController {
-
- @Override
- public Iterable<PcepSwitch> getSwitches() {
- return null;
- }
-
- @Override
- public PcepSwitch getSwitch(PcepDpid did) {
- return null;
- }
-
- @Override
- public void addListener(PcepSwitchListener listener) {
-
- }
-
- @Override
- public void removeListener(PcepSwitchListener listener) {
- }
-
- @Override
- public void addLinkListener(PcepLinkListener listener) {
- }
-
- @Override
- public void removeLinkListener(PcepLinkListener listener) {
- }
-
- @Override
- public void addTunnelListener(PcepTunnelListener listener) {
- }
-
- @Override
- public void removeTunnelListener(PcepTunnelListener listener) {
- }
-
- @Override
- public PcepTunnel applyTunnel(DeviceId srcDid, DeviceId dstDid, long srcPort, long dstPort, long bandwidth,
- String name) {
- return null;
- }
-
- @Override
- public Boolean deleteTunnel(String id) {
- return null;
- }
-
- @Override
- public Boolean updateTunnelBandwidth(String id, long bandwidth) {
- return null;
- }
-
- @Override
- public void getTunnelStatistics(String pcepTunnelId) {
-
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepReleaseTunnelProviderTest.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepReleaseTunnelProviderTest.java
deleted file mode 100644
index e3861381..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepReleaseTunnelProviderTest.java
+++ /dev/null
@@ -1,116 +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.provider.pcep.tunnel.impl;
-
-import static org.onosproject.net.DefaultAnnotations.EMPTY;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onosproject.cfg.ComponentConfigAdapter;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.incubator.net.tunnel.DefaultTunnel;
-import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultLink;
-import org.onosproject.net.DefaultPath;
-import org.onosproject.net.IpElementId;
-import org.onosproject.net.Link;
-import org.onosproject.net.Path;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv;
-
-
-public class PcepReleaseTunnelProviderTest {
-
- static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
- PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
- private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
- private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
- private final PcepControllerAdapter ctl = new PcepControllerAdapter();
- private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper();
- private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
-
- @Test
- public void testCasePcepReleaseTunnel() {
- tunnelProvider.tunnelProviderRegistry = registry;
- tunnelProvider.pcepClientController = controller;
- tunnelProvider.controller = ctl;
- tunnelProvider.tunnelService = tunnelService;
- tunnelProvider.pcepTunnelAPIMapper = pcepTunnelAPIMapper;
- tunnelProvider.cfgService = new ComponentConfigAdapter();
- tunnelProvider.activate();
-
- Tunnel tunnel;
- Path path;
- List<Link> links = new ArrayList<Link>();
-
- ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
-
- IpAddress srcIp = IpAddress.valueOf(0xB6024E20);
- IpElementId srcElementId = IpElementId.ipElement(srcIp);
-
- IpAddress dstIp = IpAddress.valueOf(0xB6024E21);
- IpElementId dstElementId = IpElementId.ipElement(dstIp);
-
- IpTunnelEndPoint ipTunnelEndPointSrc;
- ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
-
- IpTunnelEndPoint ipTunnelEndPointDst;
- ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
-
- ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
-
- ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
-
- Link link = new DefaultLink(pid, src, dst, Link.Type.DIRECT, EMPTY);
- links.add(link);
-
- path = new DefaultPath(pid, links, 20, EMPTY);
-
- tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
- new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"),
- path, EMPTY);
-
- // for releasing tunnel tunnel should exist in db
- PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.DELETE);
- pcepTunnelData.setPlspId(1);
- StatefulIPv4LspIdentidiersTlv tlv = new StatefulIPv4LspIdentidiersTlv(0, (short) 1, (short) 2, 3, 4);
- pcepTunnelData.setStatefulIpv4IndentifierTlv(tlv);
- tunnelProvider.pcepTunnelAPIMapper.addToTunnelIdMap(pcepTunnelData);
-
- tunnelProvider.pcepTunnelAPIMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
-
- tunnelProvider.releaseTunnel(tunnel);
- }
-
-
- @After
- public void tearDown() throws IOException {
- tunnelProvider.deactivate();
- tunnelProvider.controller = null;
- tunnelProvider.pcepClientController = null;
- tunnelProvider.tunnelProviderRegistry = null;
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepSetupTunnelProviderTest.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepSetupTunnelProviderTest.java
deleted file mode 100644
index ef4816ec..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepSetupTunnelProviderTest.java
+++ /dev/null
@@ -1,102 +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.provider.pcep.tunnel.impl;
-
-import static org.onosproject.net.DefaultAnnotations.EMPTY;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onosproject.cfg.ComponentConfigAdapter;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.incubator.net.tunnel.DefaultTunnel;
-import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultLink;
-import org.onosproject.net.DefaultPath;
-import org.onosproject.net.IpElementId;
-import org.onosproject.net.Link;
-import org.onosproject.net.Path;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.provider.ProviderId;
-
-public class PcepSetupTunnelProviderTest {
-
- static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
- PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
- private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
- private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
- private final PcepControllerAdapter ctl = new PcepControllerAdapter();
- private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
-
- @Test
- public void testCasePcepSetupTunnel() {
-
- tunnelProvider.tunnelProviderRegistry = registry;
- tunnelProvider.pcepClientController = controller;
- tunnelProvider.controller = ctl;
- tunnelProvider.cfgService = new ComponentConfigAdapter();
- tunnelProvider.tunnelService = tunnelService;
- tunnelProvider.activate();
-
-
- Tunnel tunnel;
- Path path;
- ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
- List<Link> links = new ArrayList<Link>();
- IpAddress srcIp = IpAddress.valueOf(0xC010101);
- IpElementId srcElementId = IpElementId.ipElement(srcIp);
-
- IpAddress dstIp = IpAddress.valueOf(0xC010102);
- IpElementId dstElementId = IpElementId.ipElement(dstIp);
-
- IpTunnelEndPoint ipTunnelEndPointSrc;
- ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
-
- IpTunnelEndPoint ipTunnelEndPointDst;
- ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
-
- ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
-
- ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
-
- Link link = new DefaultLink(pid, src, dst, Link.Type.DIRECT, EMPTY);
- links.add(link);
-
- path = new DefaultPath(pid, links, 10, EMPTY);
-
- tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
- new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"),
- path, EMPTY);
-
- tunnelProvider.setupTunnel(tunnel, path);
- }
-
- @After
- public void tearDown() throws IOException {
- tunnelProvider.deactivate();
- tunnelProvider.controller = null;
- tunnelProvider.pcepClientController = null;
- tunnelProvider.tunnelProviderRegistry = null;
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProviderTest.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProviderTest.java
deleted file mode 100644
index 0fcd1447..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProviderTest.java
+++ /dev/null
@@ -1,101 +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.provider.pcep.tunnel.impl;
-
-import static org.onosproject.net.DefaultAnnotations.EMPTY;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.incubator.net.tunnel.DefaultTunnel;
-import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultLink;
-import org.onosproject.net.DefaultPath;
-import org.onosproject.net.IpElementId;
-import org.onosproject.net.Link;
-import org.onosproject.net.Path;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.cfg.ComponentConfigAdapter;
-
-public class PcepTunnelProviderTest {
-
- static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
- PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
- private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
- private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
- private final PcepControllerAdapter ctl = new PcepControllerAdapter();
- private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
-
- @Test
- public void testCasePcepSetupTunnel() {
-
- tunnelProvider.tunnelProviderRegistry = registry;
- tunnelProvider.pcepClientController = controller;
- tunnelProvider.controller = ctl;
- tunnelProvider.cfgService = new ComponentConfigAdapter();
- tunnelProvider.tunnelService = tunnelService;
- tunnelProvider.activate();
-
- Tunnel tunnel;
- Path path;
- ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
- List<Link> links = new ArrayList<Link>();
- IpAddress srcIp = IpAddress.valueOf(0xC010101);
- IpElementId srcElementId = IpElementId.ipElement(srcIp);
-
- IpAddress dstIp = IpAddress.valueOf(0xC010102);
- IpElementId dstElementId = IpElementId.ipElement(dstIp);
-
- IpTunnelEndPoint ipTunnelEndPointSrc;
- ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
-
- IpTunnelEndPoint ipTunnelEndPointDst;
- ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
-
- ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
-
- ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
-
- Link link = new DefaultLink(pid, src, dst, Link.Type.DIRECT, EMPTY);
- links.add(link);
-
- path = new DefaultPath(pid, links, 10, EMPTY);
-
- tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
- new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"),
- path, EMPTY);
-
- tunnelProvider.setupTunnel(tunnel, path);
- }
-
- @After
- public void tearDown() throws IOException {
- tunnelProvider.deactivate();
- tunnelProvider.controller = null;
- tunnelProvider.pcepClientController = null;
- tunnelProvider.tunnelProviderRegistry = null;
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepUpdateTunnelProviderTest.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepUpdateTunnelProviderTest.java
deleted file mode 100644
index 1bcf99dd..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepUpdateTunnelProviderTest.java
+++ /dev/null
@@ -1,114 +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.provider.pcep.tunnel.impl;
-
-import static org.onosproject.net.DefaultAnnotations.EMPTY;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onosproject.cfg.ComponentConfigAdapter;
-import org.onosproject.core.DefaultGroupId;
-import org.onosproject.incubator.net.tunnel.DefaultTunnel;
-import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultLink;
-import org.onosproject.net.DefaultPath;
-import org.onosproject.net.IpElementId;
-import org.onosproject.net.Link;
-import org.onosproject.net.Path;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.pcepio.types.StatefulIPv4LspIdentidiersTlv;
-
-
-public class PcepUpdateTunnelProviderTest {
-
- static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
- PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
- private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
- private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
- private final PcepControllerAdapter ctl = new PcepControllerAdapter();
- private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper();
- private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
-
-
- @Test
- public void testCasePcepUpdateTunnel() {
- tunnelProvider.tunnelProviderRegistry = registry;
- tunnelProvider.pcepClientController = controller;
- tunnelProvider.controller = ctl;
- tunnelProvider.pcepTunnelAPIMapper = pcepTunnelAPIMapper;
- tunnelProvider.cfgService = new ComponentConfigAdapter();
- tunnelProvider.tunnelService = tunnelService;
- tunnelProvider.activate();
-
- Tunnel tunnel;
- Path path;
- ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
- List<Link> links = new ArrayList<Link>();
- IpAddress srcIp = IpAddress.valueOf(0xD010101);
- IpElementId srcElementId = IpElementId.ipElement(srcIp);
-
- IpAddress dstIp = IpAddress.valueOf(0xD010102);
- IpElementId dstElementId = IpElementId.ipElement(dstIp);
-
- IpTunnelEndPoint ipTunnelEndPointSrc;
- ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
-
- IpTunnelEndPoint ipTunnelEndPointDst;
- ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
-
- ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
-
- ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
-
- Link link = new DefaultLink(pid, src, dst, Link.Type.DIRECT, EMPTY);
- links.add(link);
-
- path = new DefaultPath(pid, links, 20, EMPTY);
-
- tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
- new DefaultGroupId(0), TunnelId.valueOf(1), TunnelName.tunnelName("T123"),
- path, EMPTY);
-
- // for updating tunnel tunnel should exist in db
- PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.UPDATE);
- pcepTunnelData.setPlspId(1);
- StatefulIPv4LspIdentidiersTlv tlv = new StatefulIPv4LspIdentidiersTlv(0, (short) 1, (short) 2, 3, 4);
- pcepTunnelData.setStatefulIpv4IndentifierTlv(tlv);
- tunnelProvider.pcepTunnelAPIMapper.addToTunnelIdMap(pcepTunnelData);
-
- tunnelProvider.pcepTunnelAPIMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
-
- tunnelProvider.updateTunnel(tunnel, path);
- }
-
- @After
- public void tearDown() throws IOException {
- tunnelProvider.deactivate();
- tunnelProvider.controller = null;
- tunnelProvider.pcepClientController = null;
- tunnelProvider.tunnelProviderRegistry = null;
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
deleted file mode 100644
index 0de914c5..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.Set;
-
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelDescription;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelProvider;
-import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
-import org.onosproject.incubator.net.tunnel.TunnelProviderService;
-import org.onosproject.net.provider.ProviderId;
-
-public class TunnelProviderRegistryAdapter implements TunnelProviderRegistry {
- TunnelProvider provider;
-
- @Override
- public TunnelProviderService register(TunnelProvider provider) {
- this.provider = provider;
- return new TestProviderService();
- }
-
- @Override
- public void unregister(TunnelProvider provider) {
- }
-
- @Override
- public Set<ProviderId> getProviders() {
- return null;
- }
-
- private class TestProviderService implements TunnelProviderService {
-
- @Override
- public TunnelProvider provider() {
- return null;
- }
-
- @Override
- public TunnelId tunnelAdded(TunnelDescription tunnel) {
- return null;
- }
-
- @Override
- public void tunnelRemoved(TunnelDescription tunnel) {
- }
-
- @Override
- public void tunnelUpdated(TunnelDescription tunnel) {
- }
-
- @Override
- public Tunnel tunnelQueryById(TunnelId tunnelId) {
- return null;
- }
- }
-}
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java
deleted file mode 100644
index 0603cb3d..00000000
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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 org.onosproject.core.ApplicationId;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.TunnelId;
-import org.onosproject.incubator.net.tunnel.TunnelListener;
-import org.onosproject.incubator.net.tunnel.TunnelName;
-import org.onosproject.incubator.net.tunnel.TunnelService;
-import org.onosproject.incubator.net.tunnel.TunnelSubscription;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.DeviceId;
-
-import java.util.Collection;
-import java.util.Collections;
-
-public class TunnelServiceAdapter implements TunnelService {
- @Override
- public Tunnel borrowTunnel(ApplicationId consumerId, TunnelId tunnelId, Annotations... annotations) {
- return null;
- }
-
- @Override
- public Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelName tunnelName,
- Annotations... annotations) {
- return null;
- }
-
- @Override
- public Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst,
- Annotations... annotations) {
- return null;
- }
-
- @Override
- public Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst,
- Tunnel.Type type, Annotations... annotations) {
- return null;
- }
-
- @Override
- public boolean returnTunnel(ApplicationId consumerId, TunnelId tunnelId, Annotations... annotations) {
- return false;
- }
-
- @Override
- public boolean returnTunnel(ApplicationId consumerId, TunnelName tunnelName, Annotations... annotations) {
- return false;
- }
-
- @Override
- public boolean returnTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst,
- Tunnel.Type type, Annotations... annotations) {
- return false;
- }
-
- @Override
- public boolean returnTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst,
- Annotations... annotations) {
- return false;
- }
-
- @Override
- public Tunnel queryTunnel(TunnelId tunnelId) {
- return null;
- }
-
- @Override
- public Collection<TunnelSubscription> queryTunnelSubscription(ApplicationId consumerId) {
- return null;
- }
-
- @Override
- public Collection<Tunnel> queryTunnel(Tunnel.Type type) {
- return null;
- }
-
- @Override
- public Collection<Tunnel> queryTunnel(TunnelEndPoint src, TunnelEndPoint dst) {
- return null;
- }
-
- @Override
- public Collection<Tunnel> queryAllTunnels() {
- return Collections.emptyList();
- }
-
- @Override
- public int tunnelCount() {
- return 0;
- }
-
- @Override
- public Iterable<Tunnel> getTunnels(DeviceId deviceId) {
- return null;
- }
-
- @Override
- public void addListener(TunnelListener listener) {
-
- }
-
- @Override
- public void removeListener(TunnelListener listener) {
-
- }
-}
diff --git a/framework/src/onos/providers/pom.xml b/framework/src/onos/providers/pom.xml
deleted file mode 100644
index 5b6b6cc5..00000000
--- a/framework/src/onos/providers/pom.xml
+++ /dev/null
@@ -1,90 +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</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-providers</artifactId>
- <packaging>pom</packaging>
-
- <description>ONOS information providers and control/management protocol adapter</description>
-
- <modules>
- <module>openflow</module>
- <module>lldp</module>
- <module>host</module>
- <module>netcfghost</module>
- <module>netconf</module>
- <module>null</module>
- <module>pcep</module>
- <module>ovsdb</module>
- <module>bgp</module>
- <module>snmp</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-incubator-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-misc</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-junit</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/framework/src/onos/providers/snmp/alarm/pom.xml b/framework/src/onos/providers/snmp/alarm/pom.xml
deleted file mode 100644
index 1ca18212..00000000
--- a/framework/src/onos/providers/snmp/alarm/pom.xml
+++ /dev/null
@@ -1,34 +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-snmp-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-snmp-provider-alarm</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS SNMP protocol alarm provider</description>
-
-</project> \ No newline at end of file
diff --git a/framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/SNMPAlarmProvider.java b/framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/SNMPAlarmProvider.java
deleted file mode 100644
index dc82a2cf..00000000
--- a/framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/SNMPAlarmProvider.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2014-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.snmp.alarm.impl;
-
-import org.apache.felix.scr.annotations.Component;
-import org.onosproject.net.DeviceId;
-import org.onosproject.incubator.net.faultmanagement.alarm.AlarmProvider;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.slf4j.Logger;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provider which uses an SNMP controller to detect network device alarms. The class leverages functionality from
- *
- * @see <a href="https://github.com/btisystems/snmp-core">https://github.com/btisystems/snmp-core</a>
- * @see <a href="https://github.com/btisystems/mibbler">https://github.com/btisystems/mibbler</a>
- */
-@Component(immediate = true)
-public class SNMPAlarmProvider extends AbstractProvider implements AlarmProvider {
-
- private static final Logger LOG = getLogger(SNMPAlarmProvider.class);
-
- /**
- * Creates a SNMP alarm provider, dummy class provided as template, tbd later.
- */
- public SNMPAlarmProvider() {
- super(new ProviderId("snmp", "org.onosproject.provider.alarm"));
- }
-
- @Override
- public void triggerProbe(final DeviceId deviceId) {
-
- // TODO in shout term should this just be synchronous and return result?
- LOG.info("Run a SNMP discovery for device at {} when done invoke on AlarmProviderService", deviceId);
-
- // TODO Look up AlarmProviderService
- // TODO Decide threading
- // TODO Decide shouldn't it be generic not alarm-specific ? Its user responsible for passing in OID list ?
- // Same for its callack AlarmProviderService ?
- }
-
-}
diff --git a/framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/package-info.java b/framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/package-info.java
deleted file mode 100644
index 2c138cbb..00000000
--- a/framework/src/onos/providers/snmp/alarm/src/main/java/org/onosproject/provider/snmp/alarm/impl/package-info.java
+++ /dev/null
@@ -1,20 +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.
- */
-
-/**
- * Provider that uses SNMP as a means of discovering alarms on devices.
- */
-package org.onosproject.provider.snmp.alarm.impl;
diff --git a/framework/src/onos/providers/snmp/pom.xml b/framework/src/onos/providers/snmp/pom.xml
deleted file mode 100644
index c9338f05..00000000
--- a/framework/src/onos/providers/snmp/pom.xml
+++ /dev/null
@@ -1,38 +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-providers</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-snmp-providers</artifactId>
- <packaging>pom</packaging>
-
- <description>ONOS SNMP Protocol Adapters</description>
-
- <modules>
- <module>alarm</module>
- </modules>
-
-</project> \ No newline at end of file