Thomas Vachuska

Removed deprecated null provider sub-modules.

Change-Id: I154bdbc5eb27ce79ae5428ec6dc01b1dc09be8b0
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<!--
3 - ~ Copyright 2014 Open Networking Laboratory
4 - ~
5 - ~ Licensed under the Apache License, Version 2.0 (the "License");
6 - ~ you may not use this file except in compliance with the License.
7 - ~ You may obtain a copy of the License at
8 - ~
9 - ~ http://www.apache.org/licenses/LICENSE-2.0
10 - ~
11 - ~ Unless required by applicable law or agreed to in writing, software
12 - ~ distributed under the License is distributed on an "AS IS" BASIS,
13 - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 - ~ See the License for the specific language governing permissions and
15 - ~ limitations under the License.
16 - -->
17 -<project xmlns="http://maven.apache.org/POM/4.0.0"
18 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 - <modelVersion>4.0.0</modelVersion>
21 -
22 - <parent>
23 - <groupId>org.onosproject</groupId>
24 - <artifactId>onos-null-providers</artifactId>
25 - <version>1.2.0-SNAPSHOT</version>
26 - <relativePath>../pom.xml</relativePath>
27 - </parent>
28 -
29 - <artifactId>onos-null-provider-device</artifactId>
30 - <packaging>bundle</packaging>
31 -
32 - <description>ONOS Null protocol device provider</description>
33 -
34 - <dependencies>
35 - <dependency>
36 - <groupId>org.osgi</groupId>
37 - <artifactId>org.osgi.compendium</artifactId>
38 - </dependency>
39 - </dependencies>
40 -
41 -</project>
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -package org.onosproject.provider.nil.device.impl;
17 -
18 -import com.google.common.collect.Lists;
19 -import com.google.common.collect.Maps;
20 -import org.apache.felix.scr.annotations.Activate;
21 -import org.apache.felix.scr.annotations.Component;
22 -import org.apache.felix.scr.annotations.Deactivate;
23 -import org.apache.felix.scr.annotations.Modified;
24 -import org.apache.felix.scr.annotations.Property;
25 -import org.apache.felix.scr.annotations.Reference;
26 -import org.apache.felix.scr.annotations.ReferenceCardinality;
27 -import org.onlab.packet.ChassisId;
28 -import org.onosproject.cfg.ComponentConfigService;
29 -import org.onosproject.cluster.ClusterService;
30 -import org.onosproject.cluster.NodeId;
31 -import org.onosproject.net.Device;
32 -import org.onosproject.net.DeviceId;
33 -import org.onosproject.net.MastershipRole;
34 -import org.onosproject.net.Port;
35 -import org.onosproject.net.PortNumber;
36 -import org.onosproject.net.device.DefaultDeviceDescription;
37 -import org.onosproject.net.device.DefaultPortDescription;
38 -import org.onosproject.net.device.DeviceDescription;
39 -import org.onosproject.net.device.DeviceProvider;
40 -import org.onosproject.net.device.DeviceProviderRegistry;
41 -import org.onosproject.net.device.DeviceProviderService;
42 -import org.onosproject.net.device.PortDescription;
43 -import org.onosproject.net.provider.AbstractProvider;
44 -import org.onosproject.net.provider.ProviderId;
45 -import org.osgi.service.component.ComponentContext;
46 -import org.slf4j.Logger;
47 -
48 -import java.net.URI;
49 -import java.net.URISyntaxException;
50 -import java.util.Dictionary;
51 -import java.util.List;
52 -import java.util.Map;
53 -import java.util.concurrent.ExecutorService;
54 -import java.util.concurrent.Executors;
55 -import java.util.concurrent.TimeUnit;
56 -
57 -import static com.google.common.base.Strings.isNullOrEmpty;
58 -import static org.onlab.util.Tools.*;
59 -import static org.slf4j.LoggerFactory.getLogger;
60 -
61 -/**
62 - * Provider which advertises fake/nonexistant devices to the core.
63 - * nodeID is passed as part of the fake device id so that multiple nodes can run simultaneously.
64 - * To be used for benchmarking only.
65 - */
66 -@Component(immediate = true)
67 -public class NullDeviceProvider extends AbstractProvider implements DeviceProvider {
68 -
69 - private static final Logger log = getLogger(NullDeviceProvider.class);
70 -
71 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
72 - protected ClusterService clusterService;
73 -
74 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
75 - protected DeviceProviderRegistry providerRegistry;
76 -
77 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
78 - protected ComponentConfigService cfgService;
79 -
80 - private DeviceProviderService providerService;
81 -
82 - private ExecutorService deviceBuilder =
83 - Executors.newFixedThreadPool(1, groupedThreads("onos/null", "device-creator"));
84 -
85 - private static final String SCHEME = "null";
86 - private static final int DEF_NUMDEVICES = 10;
87 - private static final int DEF_NUMPORTS = 10;
88 -
89 - //Delay between events in ms.
90 - private static final int EVENTINTERVAL = 5;
91 -
92 - private final Map<Integer, DeviceDescription> descriptions = Maps.newHashMap();
93 -
94 - @Property(name = "devConfigs", value = "", label = "Instance-specific configurations")
95 - private String devConfigs = null;
96 -
97 - private int numDevices = DEF_NUMDEVICES;
98 -
99 - @Property(name = "numPorts", intValue = 10, label = "Number of ports per devices")
100 - private int numPorts = DEF_NUMPORTS;
101 -
102 - private DeviceCreator creator;
103 -
104 - /**
105 - *
106 - * Creates a provider with the supplier identifier.
107 - *
108 - */
109 - public NullDeviceProvider() {
110 - super(new ProviderId("null", "org.onosproject.provider.nil"));
111 - }
112 -
113 - @Activate
114 - public void activate(ComponentContext context) {
115 - cfgService.registerProperties(getClass());
116 - providerService = providerRegistry.register(this);
117 - if (!modified(context)) {
118 - deviceBuilder.submit(new DeviceCreator(true));
119 - }
120 - log.info("Started");
121 -
122 - }
123 -
124 - @Deactivate
125 - public void deactivate(ComponentContext context) {
126 - cfgService.unregisterProperties(getClass(), false);
127 - deviceBuilder.submit(new DeviceCreator(false));
128 - try {
129 - deviceBuilder.awaitTermination(1000, TimeUnit.MILLISECONDS);
130 - } catch (InterruptedException e) {
131 - log.error("Device builder did not terminate");
132 - }
133 - deviceBuilder.shutdownNow();
134 - providerRegistry.unregister(this);
135 - providerService = null;
136 -
137 - log.info("Stopped");
138 - }
139 -
140 - @Modified
141 - public boolean modified(ComponentContext context) {
142 - if (context == null) {
143 - log.info("No configuration file, using defaults: numDevices={}, numPorts={}",
144 - numDevices, numPorts);
145 - return false;
146 - }
147 -
148 - Dictionary<?, ?> properties = context.getProperties();
149 -
150 - int newDevNum = DEF_NUMDEVICES;
151 - int newPortNum = DEF_NUMPORTS;
152 - try {
153 - String s = get(properties, "devConfigs");
154 - if (!isNullOrEmpty(s)) {
155 - newDevNum = getDevicesConfig(s);
156 - }
157 - s = get(properties, "numPorts");
158 - newPortNum = isNullOrEmpty(s) ? DEF_NUMPORTS : Integer.parseInt(s.trim());
159 - } catch (NumberFormatException e) {
160 - log.warn(e.getMessage());
161 - newDevNum = numDevices;
162 - newPortNum = numPorts;
163 - }
164 -
165 - boolean chgd = false;
166 - if (newDevNum != numDevices) {
167 - numDevices = newDevNum;
168 - chgd |= true;
169 - }
170 - if (newPortNum != numPorts) {
171 - numPorts = newPortNum;
172 - chgd |= true;
173 - }
174 - log.info("Using settings numDevices={}, numPorts={}", numDevices, numPorts);
175 - if (chgd) {
176 - deviceBuilder.submit(new DeviceCreator(true));
177 - }
178 - return chgd;
179 - }
180 -
181 - private int getDevicesConfig(String config) {
182 - for (String sub : config.split(",")) {
183 - String[] params = sub.split(":");
184 - if (params.length == 2) {
185 - NodeId that = new NodeId(params[0].trim());
186 - String nd = params[1];
187 - if (clusterService.getLocalNode().id().equals(that)) {
188 - return Integer.parseInt(nd.trim());
189 - }
190 - continue;
191 - }
192 - }
193 - return DEF_NUMDEVICES;
194 - }
195 -
196 - @Override
197 - public void triggerProbe(DeviceId deviceId) {}
198 -
199 - @Override
200 - public void roleChanged(DeviceId deviceId, MastershipRole newRole) {}
201 -
202 - @Override
203 - public boolean isReachable(DeviceId deviceId) {
204 - return descriptions.values().stream()
205 - .anyMatch(desc -> desc.deviceURI().equals(deviceId.uri()));
206 - }
207 -
208 -
209 - private class DeviceCreator implements Runnable {
210 -
211 - private boolean setup;
212 -
213 - public DeviceCreator(boolean setup) {
214 - this.setup = setup;
215 - }
216 -
217 - @Override
218 - public void run() {
219 - if (setup) {
220 - try {
221 - advertiseDevices();
222 - } catch (URISyntaxException e) {
223 - log.warn("URI creation failed during device adverts {}", e.getMessage());
224 - }
225 - } else {
226 - removeDevices();
227 - }
228 - }
229 -
230 - private void removeDevices() {
231 - for (DeviceDescription desc : descriptions.values()) {
232 - providerService.deviceDisconnected(
233 - DeviceId.deviceId(desc.deviceURI()));
234 - delay(EVENTINTERVAL);
235 - }
236 - descriptions.clear();
237 - }
238 -
239 - private void advertiseDevices() throws URISyntaxException {
240 - DeviceId did;
241 - ChassisId cid;
242 -
243 - // nodeIdHash takes into account for nodeID to avoid collisions when running multi-node providers.
244 - long nodeIdHash = clusterService.getLocalNode().id().hashCode() << 16;
245 -
246 - for (int i = 0; i < numDevices; i++) {
247 - long id = nodeIdHash | i;
248 -
249 - did = DeviceId.deviceId(new URI(SCHEME, toHex(id), null));
250 - cid = new ChassisId(i);
251 - DeviceDescription desc =
252 - new DefaultDeviceDescription(did.uri(), Device.Type.SWITCH,
253 - "ON.Lab", "0.0.1", "0.0.1", "1234",
254 - cid);
255 - descriptions.put(i, desc);
256 - providerService.deviceConnected(did, desc);
257 - providerService.updatePorts(did, buildPorts());
258 - delay(EVENTINTERVAL);
259 - }
260 - }
261 -
262 - private List<PortDescription> buildPorts() {
263 - List<PortDescription> ports = Lists.newArrayList();
264 - for (int i = 0; i < numPorts; i++) {
265 - ports.add(new DefaultPortDescription(PortNumber.portNumber(i), true,
266 - Port.Type.COPPER,
267 - 0));
268 - }
269 - return ports;
270 - }
271 - }
272 -}
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -/**
18 - * Provider that advertises fake devices.
19 - */
20 -package org.onosproject.provider.nil.device.impl;
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<!--
3 - ~ Copyright 2014 Open Networking Laboratory
4 - ~
5 - ~ Licensed under the Apache License, Version 2.0 (the "License");
6 - ~ you may not use this file except in compliance with the License.
7 - ~ You may obtain a copy of the License at
8 - ~
9 - ~ http://www.apache.org/licenses/LICENSE-2.0
10 - ~
11 - ~ Unless required by applicable law or agreed to in writing, software
12 - ~ distributed under the License is distributed on an "AS IS" BASIS,
13 - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 - ~ See the License for the specific language governing permissions and
15 - ~ limitations under the License.
16 - -->
17 -<project xmlns="http://maven.apache.org/POM/4.0.0"
18 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 - <modelVersion>4.0.0</modelVersion>
21 -
22 - <parent>
23 - <groupId>org.onosproject</groupId>
24 - <artifactId>onos-null-providers</artifactId>
25 - <version>1.2.0-SNAPSHOT</version>
26 - <relativePath>../pom.xml</relativePath>
27 - </parent>
28 -
29 - <artifactId>onos-null-provider-flow</artifactId>
30 - <packaging>bundle</packaging>
31 -
32 - <description>ONOS Null protocol flow provider</description>
33 -
34 -</project>
1 -/*
2 - * Copyright 2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -package org.onosproject.provider.nil.flow.impl;
17 -
18 -import com.google.common.collect.Sets;
19 -import org.apache.felix.scr.annotations.Activate;
20 -import org.apache.felix.scr.annotations.Component;
21 -import org.apache.felix.scr.annotations.Deactivate;
22 -import org.apache.felix.scr.annotations.Reference;
23 -import org.apache.felix.scr.annotations.ReferenceCardinality;
24 -import org.jboss.netty.util.HashedWheelTimer;
25 -import org.jboss.netty.util.Timeout;
26 -import org.jboss.netty.util.TimerTask;
27 -import org.onlab.util.Timer;
28 -import org.onosproject.core.ApplicationId;
29 -import org.onosproject.net.DeviceId;
30 -import org.onosproject.net.flow.CompletedBatchOperation;
31 -import org.onosproject.net.flow.DefaultFlowEntry;
32 -import org.onosproject.net.flow.FlowEntry;
33 -import org.onosproject.net.flow.FlowRule;
34 -import org.onosproject.net.flow.FlowRuleBatchEntry;
35 -import org.onosproject.net.flow.FlowRuleBatchOperation;
36 -import org.onosproject.net.flow.FlowRuleProvider;
37 -import org.onosproject.net.flow.FlowRuleProviderRegistry;
38 -import org.onosproject.net.flow.FlowRuleProviderService;
39 -import org.onosproject.net.provider.AbstractProvider;
40 -import org.onosproject.net.provider.ProviderId;
41 -import org.slf4j.Logger;
42 -
43 -import java.util.Collections;
44 -import java.util.Set;
45 -import java.util.concurrent.ConcurrentHashMap;
46 -import java.util.concurrent.ConcurrentMap;
47 -import java.util.concurrent.TimeUnit;
48 -
49 -import static org.slf4j.LoggerFactory.getLogger;
50 -
51 -/**
52 - * Null provider to accept any flow and report them.
53 - */
54 -@Component(immediate = true)
55 -public class NullFlowRuleProvider extends AbstractProvider implements FlowRuleProvider {
56 -
57 - private final Logger log = getLogger(getClass());
58 -
59 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 - protected FlowRuleProviderRegistry providerRegistry;
61 -
62 - private ConcurrentMap<DeviceId, Set<FlowEntry>> flowTable = new ConcurrentHashMap<>();
63 -
64 - private FlowRuleProviderService providerService;
65 -
66 - private HashedWheelTimer timer = Timer.getTimer();
67 - private Timeout timeout;
68 -
69 - public NullFlowRuleProvider() {
70 - super(new ProviderId("null", "org.onosproject.provider.nil"));
71 - }
72 -
73 - @Activate
74 - public void activate() {
75 - providerService = providerRegistry.register(this);
76 - timeout = timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS);
77 -
78 - log.info("Started");
79 - }
80 -
81 - @Deactivate
82 - public void deactivate() {
83 - providerRegistry.unregister(this);
84 - providerService = null;
85 - timeout.cancel();
86 -
87 - log.info("Stopped");
88 - }
89 -
90 - @Override
91 - public void applyFlowRule(FlowRule... flowRules) {}
92 -
93 - @Override
94 - public void removeFlowRule(FlowRule... flowRules) {}
95 -
96 - @Override
97 - public void removeRulesById(ApplicationId id, FlowRule... flowRules) {
98 - log.info("removal by app id not supported in null provider");
99 - }
100 -
101 - @Override
102 - public void executeBatch(
103 - FlowRuleBatchOperation batch) {
104 - Set<FlowEntry> flowRules = flowTable.getOrDefault(batch.deviceId(), Sets.newConcurrentHashSet());
105 - for (FlowRuleBatchEntry fbe : batch.getOperations()) {
106 - switch (fbe.operator()) {
107 - case ADD:
108 - flowRules.add(new DefaultFlowEntry(fbe.target()));
109 - break;
110 - case REMOVE:
111 - flowRules.remove(new DefaultFlowEntry(fbe.target()));
112 - break;
113 - case MODIFY:
114 - FlowEntry entry = new DefaultFlowEntry(fbe.target());
115 - flowRules.remove(entry);
116 - flowRules.add(entry);
117 - break;
118 - default:
119 - log.error("Unknown flow operation: {}", fbe);
120 - }
121 - }
122 - flowTable.put(batch.deviceId(), flowRules);
123 - providerService.batchOperationCompleted(batch.id(),
124 - new CompletedBatchOperation(
125 - true,
126 - Collections.emptySet(),
127 - batch.deviceId()));
128 - }
129 -
130 - private class StatisticTask implements TimerTask {
131 -
132 - @Override
133 - public void run(Timeout to) throws Exception {
134 - for (DeviceId devId : flowTable.keySet()) {
135 - providerService.pushFlowMetrics(devId,
136 - flowTable.getOrDefault(devId, Collections.emptySet()));
137 - }
138 - timeout = timer.newTimeout(to.getTask(), 5, TimeUnit.SECONDS);
139 -
140 - }
141 - }
142 -}
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -/**
18 - * Provider that will accept any flow rules.
19 - */
20 -package org.onosproject.provider.nil.flow.impl;
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<!--
3 - ~ Copyright 2014 Open Networking Laboratory
4 - ~
5 - ~ Licensed under the Apache License, Version 2.0 (the "License");
6 - ~ you may not use this file except in compliance with the License.
7 - ~ You may obtain a copy of the License at
8 - ~
9 - ~ http://www.apache.org/licenses/LICENSE-2.0
10 - ~
11 - ~ Unless required by applicable law or agreed to in writing, software
12 - ~ distributed under the License is distributed on an "AS IS" BASIS,
13 - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 - ~ See the License for the specific language governing permissions and
15 - ~ limitations under the License.
16 - -->
17 -<project xmlns="http://maven.apache.org/POM/4.0.0"
18 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 - <modelVersion>4.0.0</modelVersion>
21 -
22 - <parent>
23 - <groupId>org.onosproject</groupId>
24 - <artifactId>onos-null-providers</artifactId>
25 - <version>1.2.0-SNAPSHOT</version>
26 - <relativePath>../pom.xml</relativePath>
27 - </parent>
28 -
29 - <artifactId>onos-null-provider-host</artifactId>
30 - <packaging>bundle</packaging>
31 -
32 - <description>ONOS Null host provider</description>
33 -
34 -</project>
1 -/*
2 - * Copyright 2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -package org.onosproject.provider.nil.host.impl;
17 -
18 -import org.apache.felix.scr.annotations.Activate;
19 -import org.apache.felix.scr.annotations.Component;
20 -import org.apache.felix.scr.annotations.Deactivate;
21 -import org.apache.felix.scr.annotations.Reference;
22 -import org.apache.felix.scr.annotations.ReferenceCardinality;
23 -import org.onlab.packet.MacAddress;
24 -import org.onlab.packet.VlanId;
25 -import org.onosproject.cluster.ClusterService;
26 -import org.onosproject.mastership.MastershipService;
27 -import org.onosproject.net.Device;
28 -import org.onosproject.net.Host;
29 -import org.onosproject.net.HostId;
30 -import org.onosproject.net.HostLocation;
31 -import org.onosproject.net.MastershipRole;
32 -import org.onosproject.net.PortNumber;
33 -import org.onosproject.net.device.DeviceEvent;
34 -import org.onosproject.net.device.DeviceListener;
35 -import org.onosproject.net.device.DeviceService;
36 -import org.onosproject.net.host.DefaultHostDescription;
37 -import org.onosproject.net.host.HostDescription;
38 -import org.onosproject.net.host.HostProvider;
39 -import org.onosproject.net.host.HostProviderRegistry;
40 -import org.onosproject.net.host.HostProviderService;
41 -import org.onosproject.net.provider.AbstractProvider;
42 -import org.onosproject.net.provider.ProviderId;
43 -import org.slf4j.Logger;
44 -
45 -import static org.onlab.util.Tools.toHex;
46 -import static org.slf4j.LoggerFactory.getLogger;
47 -
48 -/**
49 - * Null provider to advertise fake hosts.
50 - */
51 -@Component(immediate = true)
52 -public class NullHostProvider extends AbstractProvider implements HostProvider {
53 -
54 - private final Logger log = getLogger(getClass());
55 -
56 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
57 - protected DeviceService deviceService;
58 -
59 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 - protected MastershipService roleService;
61 -
62 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
63 - protected ClusterService nodeService;
64 -
65 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
66 - protected HostProviderRegistry providerRegistry;
67 -
68 - private HostProviderService providerService;
69 -
70 - //make sure the device has enough ports to accomodate all of them.
71 - private static final int HOSTSPERDEVICE = 5;
72 -
73 - private final InternalHostProvider hostProvider = new InternalHostProvider();
74 -
75 - /**
76 - * Creates an OpenFlow host provider.
77 - */
78 - public NullHostProvider() {
79 - super(new ProviderId("null", "org.onosproject.provider.nil"));
80 - }
81 -
82 - /**
83 - * Creates a provider with the supplier identifier.
84 - *
85 - * @param id provider id
86 - */
87 - protected NullHostProvider(ProviderId id) {
88 - super(id);
89 - }
90 -
91 - @Activate
92 - public void activate() {
93 - providerService = providerRegistry.register(this);
94 - for (Device dev : deviceService.getDevices()) {
95 - addHosts(dev);
96 - }
97 - deviceService.addListener(hostProvider);
98 -
99 - log.info("Started");
100 - }
101 -
102 - @Deactivate
103 - public void deactivate() {
104 - providerRegistry.unregister(this);
105 - deviceService.removeListener(hostProvider);
106 - providerService = null;
107 - log.info("Stopped");
108 - }
109 -
110 - @Override
111 - public void triggerProbe(Host host) {}
112 -
113 - private void addHosts(Device device) {
114 - String nhash = toHex(nodeService.getLocalNode().id().hashCode());
115 - String dhash = device.id().toString();
116 - // make sure this instance owns the device.
117 - if (!nhash.substring(nhash.length() - 3)
118 - .equals(dhash.substring(14, 17))) {
119 - log.warn("Device {} is not mine. Can't add hosts.", device.id());
120 - return;
121 - }
122 - for (int i = 0; i < HOSTSPERDEVICE; i++) {
123 - providerService.hostDetected(
124 - HostId.hostId(MacAddress.valueOf(i + device.hashCode()),
125 - VlanId.vlanId((short) -1)),
126 - buildHostDescription(device, i));
127 - }
128 - }
129 -
130 - private void removeHosts(Device device) {
131 - for (int i = 0; i < HOSTSPERDEVICE; i++) {
132 - providerService.hostVanished(
133 - HostId.hostId(MacAddress.valueOf(i + device.hashCode()),
134 - VlanId.vlanId((short) -1)));
135 - }
136 - }
137 -
138 - private HostDescription buildHostDescription(Device device, int port) {
139 - MacAddress mac = MacAddress.valueOf(device.hashCode() + port);
140 - HostLocation location = new HostLocation(device.id(),
141 - PortNumber.portNumber(port), 0L);
142 - return new DefaultHostDescription(mac, VlanId.vlanId((short) -1), location);
143 - }
144 -
145 - private class InternalHostProvider implements DeviceListener {
146 - @Override
147 - public void event(DeviceEvent event) {
148 - Device dev = event.subject();
149 - if (!deviceService.getRole(event.subject().id()).equals(
150 - MastershipRole.MASTER)) {
151 - log.info("Local node is not master for device {}", event
152 - .subject().id());
153 - return;
154 - }
155 - switch (event.type()) {
156 -
157 - case DEVICE_ADDED:
158 - addHosts(dev);
159 - break;
160 - case DEVICE_UPDATED:
161 - break;
162 - case DEVICE_REMOVED:
163 - removeHosts(dev);
164 - break;
165 - case DEVICE_SUSPENDED:
166 - break;
167 - case DEVICE_AVAILABILITY_CHANGED:
168 - break;
169 - case PORT_ADDED:
170 - break;
171 - case PORT_UPDATED:
172 - break;
173 - case PORT_REMOVED:
174 - break;
175 - default:
176 - break;
177 - }
178 - }
179 -
180 - }
181 -
182 -}
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -/**
18 - * Provider that advertises fake hosts.
19 - */
20 -package org.onosproject.provider.nil.host.impl;
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<!--
3 - ~ Copyright 2014 Open Networking Laboratory
4 - ~
5 - ~ Licensed under the Apache License, Version 2.0 (the "License");
6 - ~ you may not use this file except in compliance with the License.
7 - ~ You may obtain a copy of the License at
8 - ~
9 - ~ http://www.apache.org/licenses/LICENSE-2.0
10 - ~
11 - ~ Unless required by applicable law or agreed to in writing, software
12 - ~ distributed under the License is distributed on an "AS IS" BASIS,
13 - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 - ~ See the License for the specific language governing permissions and
15 - ~ limitations under the License.
16 - -->
17 -<project xmlns="http://maven.apache.org/POM/4.0.0"
18 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 - <modelVersion>4.0.0</modelVersion>
21 -
22 - <parent>
23 - <groupId>org.onosproject</groupId>
24 - <artifactId>onos-null-providers</artifactId>
25 - <version>1.2.0-SNAPSHOT</version>
26 - <relativePath>../pom.xml</relativePath>
27 - </parent>
28 -
29 - <artifactId>onos-null-provider-link</artifactId>
30 - <packaging>bundle</packaging>
31 -
32 - <description>ONOS Null link provider</description>
33 -
34 - <dependencies>
35 - <dependency>
36 - <groupId>org.osgi</groupId>
37 - <artifactId>org.osgi.compendium</artifactId>
38 - </dependency>
39 - </dependencies>
40 -
41 -</project>
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -/**
18 - * Provider that advertises fake links.
19 - */
20 -package org.onosproject.provider.nil.link.impl;
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<!--
3 - ~ Copyright 2014 Open Networking Laboratory
4 - ~
5 - ~ Licensed under the Apache License, Version 2.0 (the "License");
6 - ~ you may not use this file except in compliance with the License.
7 - ~ You may obtain a copy of the License at
8 - ~
9 - ~ http://www.apache.org/licenses/LICENSE-2.0
10 - ~
11 - ~ Unless required by applicable law or agreed to in writing, software
12 - ~ distributed under the License is distributed on an "AS IS" BASIS,
13 - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 - ~ See the License for the specific language governing permissions and
15 - ~ limitations under the License.
16 - -->
17 -<project xmlns="http://maven.apache.org/POM/4.0.0"
18 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 - <modelVersion>4.0.0</modelVersion>
21 -
22 - <parent>
23 - <groupId>org.onosproject</groupId>
24 - <artifactId>onos-null-providers</artifactId>
25 - <version>1.2.0-SNAPSHOT</version>
26 - <relativePath>../pom.xml</relativePath>
27 - </parent>
28 -
29 - <artifactId>onos-null-provider-packet</artifactId>
30 - <packaging>bundle</packaging>
31 -
32 - <description>ONOS Null packet provider</description>
33 -
34 - <dependencies>
35 - <dependency>
36 - <groupId>org.osgi</groupId>
37 - <artifactId>org.osgi.compendium</artifactId>
38 - </dependency>
39 - </dependencies>
40 -
41 -</project>
1 -/*
2 - * Copyright 2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -package org.onosproject.provider.nil.packet.impl;
17 -
18 -import org.apache.felix.scr.annotations.Activate;
19 -import org.apache.felix.scr.annotations.Component;
20 -import org.apache.felix.scr.annotations.Deactivate;
21 -import org.apache.felix.scr.annotations.Modified;
22 -import org.apache.felix.scr.annotations.Property;
23 -import org.apache.felix.scr.annotations.Reference;
24 -import org.apache.felix.scr.annotations.ReferenceCardinality;
25 -import org.onlab.packet.Ethernet;
26 -import org.onlab.packet.ICMP;
27 -import org.onosproject.cfg.ComponentConfigService;
28 -import org.onosproject.net.ConnectPoint;
29 -import org.onosproject.net.Device;
30 -import org.onosproject.net.PortNumber;
31 -import org.onosproject.net.device.DeviceService;
32 -import org.onosproject.net.packet.DefaultInboundPacket;
33 -import org.onosproject.net.packet.DefaultPacketContext;
34 -import org.onosproject.net.packet.InboundPacket;
35 -import org.onosproject.net.packet.OutboundPacket;
36 -import org.onosproject.net.packet.PacketContext;
37 -import org.onosproject.net.packet.PacketProvider;
38 -import org.onosproject.net.packet.PacketProviderRegistry;
39 -import org.onosproject.net.packet.PacketProviderService;
40 -import org.onosproject.net.provider.AbstractProvider;
41 -import org.onosproject.net.provider.ProviderId;
42 -import org.osgi.service.component.ComponentContext;
43 -import org.slf4j.Logger;
44 -
45 -import java.nio.ByteBuffer;
46 -import java.util.Dictionary;
47 -import java.util.concurrent.ExecutorService;
48 -import java.util.concurrent.Executors;
49 -import java.util.concurrent.TimeUnit;
50 -
51 -import static com.google.common.base.Strings.isNullOrEmpty;
52 -import static org.onlab.util.Tools.delay;
53 -import static org.onlab.util.Tools.groupedThreads;
54 -import static org.slf4j.LoggerFactory.getLogger;
55 -
56 -/**
57 - * Provider which 1) intercepts network-bound messages from the core, and 2)
58 - * generates PacketEvents at some tunable rate. To be used for benchmarking
59 - * only.
60 - */
61 -@Component(immediate = true)
62 -public class NullPacketProvider extends AbstractProvider implements
63 - PacketProvider {
64 -
65 - private final Logger log = getLogger(getClass());
66 -
67 - // Default packetEvent generation rate (in packets/sec)
68 - // If 0, we are just a sink for network-bound packets
69 - private static final int DEFAULT_RATE = 5;
70 - // arbitrary host "destination"
71 - private static final int DESTHOST = 5;
72 -
73 - private PacketProviderService providerService;
74 -
75 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
76 - protected PacketProviderRegistry providerRegistry;
77 -
78 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
79 - protected DeviceService deviceService;
80 -
81 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
82 - protected ComponentConfigService cfgService;
83 -
84 - // Rate to generate PacketEvents, per second
85 - @Property(name = "pktRate", intValue = DEFAULT_RATE,
86 - label = "Rate of PacketEvent generation")
87 - private int pktRate = DEFAULT_RATE;
88 -
89 - private ExecutorService packetDriver =
90 - Executors.newFixedThreadPool(1, groupedThreads("onos/null", "packet-driver"));
91 -
92 - public NullPacketProvider() {
93 - super(new ProviderId("null", "org.onosproject.provider.nil"));
94 - }
95 -
96 - @Activate
97 - public void activate(ComponentContext context) {
98 - cfgService.registerProperties(getClass());
99 - providerService = providerRegistry.register(this);
100 - if (!modified(context)) {
101 - packetDriver.submit(new PacketDriver());
102 - }
103 - log.info("started");
104 - }
105 -
106 - @Deactivate
107 - public void deactivate(ComponentContext context) {
108 - cfgService.unregisterProperties(getClass(), false);
109 - try {
110 - packetDriver.awaitTermination(1000, TimeUnit.MILLISECONDS);
111 - } catch (InterruptedException e) {
112 - log.error("PacketDriver did not terminate");
113 - }
114 - packetDriver.shutdownNow();
115 - providerRegistry.unregister(this);
116 - log.info("stopped");
117 - }
118 -
119 - @Modified
120 - public boolean modified(ComponentContext context) {
121 - if (context == null) {
122 - log.info("No configuration change, using defaults: pktRate={}",
123 - DEFAULT_RATE);
124 - return false;
125 - }
126 - Dictionary<?, ?> properties = context.getProperties();
127 -
128 - int newRate;
129 - try {
130 - String s = String.valueOf(properties.get("pktRate"));
131 - newRate = isNullOrEmpty(s) ? pktRate : Integer.parseInt(s.trim());
132 - } catch (NumberFormatException | ClassCastException e) {
133 - log.warn(e.getMessage());
134 - newRate = pktRate;
135 - }
136 -
137 - if (newRate != pktRate) {
138 - pktRate = newRate;
139 - packetDriver.submit(new PacketDriver());
140 - log.info("Using new settings: pktRate={}", pktRate);
141 - return true;
142 - }
143 - return false;
144 - }
145 -
146 - @Override
147 - public void emit(OutboundPacket packet) {
148 - // We don't have a network to emit to. Keep a counter here, maybe?
149 - }
150 -
151 - /**
152 - * Generates packet events at a given rate.
153 - */
154 - private class PacketDriver implements Runnable {
155 -
156 - // time between event firing, in milliseconds
157 - int pktInterval;
158 - // filler echo request
159 - ICMP icmp;
160 - Ethernet eth;
161 -
162 - public PacketDriver() {
163 - pktInterval = 1000 / pktRate;
164 - icmp = new ICMP();
165 - icmp.setIcmpType((byte) 8).setIcmpCode((byte) 0)
166 - .setChecksum((short) 0);
167 - eth = new Ethernet();
168 - eth.setEtherType(Ethernet.TYPE_IPV4);
169 - eth.setPayload(icmp);
170 - }
171 -
172 - @Override
173 - public void run() {
174 - log.info("PacketDriver started");
175 - while (!packetDriver.isShutdown()) {
176 - for (Device dev : deviceService.getDevices()) {
177 - sendEvents(dev);
178 - }
179 - }
180 - }
181 -
182 - private void sendEvents(Device dev) {
183 - // make it look like things came from ports attached to hosts
184 - for (int i = 0; i < 4; i++) {
185 - eth.setSourceMACAddress("00:00:10:00:00:0" + i)
186 - .setDestinationMACAddress("00:00:10:00:00:0" + DESTHOST);
187 - InboundPacket inPkt = new DefaultInboundPacket(
188 - new ConnectPoint(dev.id(), PortNumber.portNumber(i)),
189 - eth, ByteBuffer.wrap(eth.serialize()));
190 - PacketContext pctx = new NullPacketContext(
191 - System.currentTimeMillis(), inPkt, null, false);
192 - providerService.processPacket(pctx);
193 - delay(pktInterval);
194 - }
195 - }
196 -
197 - }
198 -
199 - /**
200 - * Minimal PacketContext to make core + applications happy.
201 - */
202 - private class NullPacketContext extends DefaultPacketContext {
203 -
204 - public NullPacketContext(long time, InboundPacket inPkt,
205 - OutboundPacket outPkt, boolean block) {
206 - super(time, inPkt, outPkt, block);
207 - }
208 -
209 - @Override
210 - public void send() {
211 - // We don't send anything out.
212 - }
213 -
214 - }
215 -
216 -}
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -/**
18 - * Provider that sends and brings packets to &amp; from oblivion.
19 - */
20 -package org.onosproject.provider.nil.packet.impl;
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
29 <artifactId>onos-null-provider</artifactId> 29 <artifactId>onos-null-provider</artifactId>
30 <packaging>bundle</packaging> 30 <packaging>bundle</packaging>
31 31
32 - <description>ONOS null protocol adapters</description> 32 + <description>Null southbound providers application</description>
33 33
34 <dependencies> 34 <dependencies>
35 <dependency> 35 <dependency>
......