ONOS-3972 Implemented BMv2 device provider
BMv2 devices can now be discovered (along with port informations) using net-cfg (see tools/test/config/bmv2-cfg.json) Change-Id: Ief2ca790dceb4d047b75aae6c5e1a89a05215e5f
Showing
9 changed files
with
531 additions
and
0 deletions
providers/bmv2/app/features.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||
| 2 | +<!-- | ||
| 3 | + ~ Copyright 2014-2016 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 | +<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}"> | ||
| 18 | + <feature name="${project.artifactId}" version="${project.version}" | ||
| 19 | + description="${project.description}"> | ||
| 20 | + <feature>onos-drivers-bmv2</feature> | ||
| 21 | + <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle> | ||
| 22 | + <bundle>mvn:${project.groupId}/onos-bmv2-provider-device/${project.version}</bundle> | ||
| 23 | + <bundle>mvn:org.apache.thrift/libthrift/0.9.2</bundle> | ||
| 24 | + <bundle>mvn:${project.groupId}/onos-bmv2-protocol/${project.version}</bundle> | ||
| 25 | + </feature> | ||
| 26 | +</features> | ||
| 27 | + |
providers/bmv2/app/pom.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!-- | ||
| 3 | + ~ Copyright 2014-2016 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 | + | ||
| 18 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
| 19 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| 20 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
| 21 | + <parent> | ||
| 22 | + <artifactId>onos-bmv2-providers</artifactId> | ||
| 23 | + <groupId>org.onosproject</groupId> | ||
| 24 | + <version>1.6.0-SNAPSHOT</version> | ||
| 25 | + </parent> | ||
| 26 | + | ||
| 27 | + <modelVersion>4.0.0</modelVersion> | ||
| 28 | + | ||
| 29 | + <artifactId>onos-bmv2-app</artifactId> | ||
| 30 | + <packaging>bundle</packaging> | ||
| 31 | + | ||
| 32 | + <description>ONOS BMv2 southbound providers</description> | ||
| 33 | + | ||
| 34 | + <properties> | ||
| 35 | + <onos.app.name>org.onosproject.bmv2</onos.app.name> | ||
| 36 | + <onos.app.title>BMv2 Provider</onos.app.title> | ||
| 37 | + <onos.app.category>Provider</onos.app.category> | ||
| 38 | + </properties> | ||
| 39 | + | ||
| 40 | + <dependencies> | ||
| 41 | + <dependency> | ||
| 42 | + <groupId>org.onosproject</groupId> | ||
| 43 | + <artifactId>onos-bmv2-provider-device</artifactId> | ||
| 44 | + <version>${project.version}</version> | ||
| 45 | + </dependency> | ||
| 46 | + </dependencies> | ||
| 47 | + | ||
| 48 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
providers/bmv2/device/pom.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!-- | ||
| 3 | + ~ Copyright 2014-2016 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 | + | ||
| 18 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
| 19 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| 20 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
| 21 | + <parent> | ||
| 22 | + <artifactId>onos-bmv2-providers</artifactId> | ||
| 23 | + <groupId>org.onosproject</groupId> | ||
| 24 | + <version>1.6.0-SNAPSHOT</version> | ||
| 25 | + </parent> | ||
| 26 | + <modelVersion>4.0.0</modelVersion> | ||
| 27 | + | ||
| 28 | + <artifactId>onos-bmv2-provider-device</artifactId> | ||
| 29 | + <packaging>bundle</packaging> | ||
| 30 | + | ||
| 31 | + <description>ONOS BMv2 device provider</description> | ||
| 32 | + | ||
| 33 | + <dependencies> | ||
| 34 | + <dependency> | ||
| 35 | + <groupId>org.onosproject</groupId> | ||
| 36 | + <artifactId>onos-drivers-bmv2</artifactId> | ||
| 37 | + <version>${project.version}</version> | ||
| 38 | + </dependency> | ||
| 39 | + <dependency> | ||
| 40 | + <groupId>org.onosproject</groupId> | ||
| 41 | + <artifactId>onos-core-common</artifactId> | ||
| 42 | + <version>1.6.0-SNAPSHOT</version> | ||
| 43 | + </dependency> | ||
| 44 | + </dependencies> | ||
| 45 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +/* | ||
| 2 | + * Copyright 2014-2016 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 | +package org.onosproject.provider.bmv2.device.impl; | ||
| 18 | + | ||
| 19 | +import com.google.common.collect.Sets; | ||
| 20 | +import org.apache.felix.scr.annotations.Component; | ||
| 21 | +import org.apache.felix.scr.annotations.Reference; | ||
| 22 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
| 23 | +import org.onlab.packet.ChassisId; | ||
| 24 | +import org.onosproject.common.net.AbstractDeviceProvider; | ||
| 25 | +import org.onosproject.core.ApplicationId; | ||
| 26 | +import org.onosproject.core.CoreService; | ||
| 27 | +import org.onosproject.incubator.net.config.basics.ConfigException; | ||
| 28 | +import org.onosproject.net.AnnotationKeys; | ||
| 29 | +import org.onosproject.net.DefaultAnnotations; | ||
| 30 | +import org.onosproject.net.Device; | ||
| 31 | +import org.onosproject.net.DeviceId; | ||
| 32 | +import org.onosproject.net.MastershipRole; | ||
| 33 | +import org.onosproject.net.PortNumber; | ||
| 34 | +import org.onosproject.net.SparseAnnotations; | ||
| 35 | +import org.onosproject.net.behaviour.PortDiscovery; | ||
| 36 | +import org.onosproject.net.config.ConfigFactory; | ||
| 37 | +import org.onosproject.net.config.NetworkConfigEvent; | ||
| 38 | +import org.onosproject.net.config.NetworkConfigListener; | ||
| 39 | +import org.onosproject.net.config.NetworkConfigRegistry; | ||
| 40 | +import org.onosproject.net.device.DefaultDeviceDescription; | ||
| 41 | +import org.onosproject.net.device.DeviceDescription; | ||
| 42 | +import org.onosproject.net.device.DeviceService; | ||
| 43 | +import org.onosproject.net.provider.ProviderId; | ||
| 44 | +import org.slf4j.Logger; | ||
| 45 | + | ||
| 46 | +import java.net.URI; | ||
| 47 | +import java.net.URISyntaxException; | ||
| 48 | +import java.util.Set; | ||
| 49 | +import java.util.concurrent.ExecutorService; | ||
| 50 | +import java.util.concurrent.Executors; | ||
| 51 | +import java.util.concurrent.TimeUnit; | ||
| 52 | + | ||
| 53 | +import static org.onlab.util.Tools.groupedThreads; | ||
| 54 | +import static org.onosproject.bmv2.ctl.Bmv2ThriftClient.ping; | ||
| 55 | +import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY; | ||
| 56 | +import static org.slf4j.LoggerFactory.getLogger; | ||
| 57 | + | ||
| 58 | +/** | ||
| 59 | + * BMv2 device provider. | ||
| 60 | + */ | ||
| 61 | +@Component(immediate = true) | ||
| 62 | +public class Bmv2DeviceProvider extends AbstractDeviceProvider { | ||
| 63 | + | ||
| 64 | + private final Logger log = getLogger(Bmv2DeviceProvider.class); | ||
| 65 | + | ||
| 66 | + public static final String MANUFACTURER = "p4.org"; | ||
| 67 | + public static final String HW_VERSION = "bmv2"; | ||
| 68 | + private static final String APP_NAME = "org.onosproject.bmv2"; | ||
| 69 | + private static final String UNKNOWN = "unknown"; | ||
| 70 | + public static final String SCHEME = "bmv2"; | ||
| 71 | + | ||
| 72 | + private final ExecutorService deviceDiscoveryExecutor = Executors | ||
| 73 | + .newFixedThreadPool(5, groupedThreads("onos/bmv2", "device-discovery", log)); | ||
| 74 | + | ||
| 75 | + private final NetworkConfigListener cfgListener = new InternalNetworkConfigListener(); | ||
| 76 | + | ||
| 77 | + private final ConfigFactory cfgFactory = | ||
| 78 | + new ConfigFactory<ApplicationId, Bmv2ProviderConfig>( | ||
| 79 | + APP_SUBJECT_FACTORY, Bmv2ProviderConfig.class, | ||
| 80 | + "devices", true) { | ||
| 81 | + @Override | ||
| 82 | + public Bmv2ProviderConfig createConfig() { | ||
| 83 | + return new Bmv2ProviderConfig(); | ||
| 84 | + } | ||
| 85 | + }; | ||
| 86 | + | ||
| 87 | + private final Set<DeviceId> activeDevices = Sets.newConcurrentHashSet(); | ||
| 88 | + | ||
| 89 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 90 | + protected NetworkConfigRegistry netCfgService; | ||
| 91 | + | ||
| 92 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 93 | + protected CoreService coreService; | ||
| 94 | + | ||
| 95 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 96 | + protected DeviceService deviceService; | ||
| 97 | + | ||
| 98 | + private ApplicationId appId; | ||
| 99 | + | ||
| 100 | + /** | ||
| 101 | + * Creates a Bmv2 device provider with the supplied identifier. | ||
| 102 | + */ | ||
| 103 | + public Bmv2DeviceProvider() { | ||
| 104 | + super(new ProviderId("bmv2", "org.onosproject.provider.device")); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + protected static DeviceId deviceIdOf(Bmv2ProviderConfig.Bmv2DeviceInfo info) { | ||
| 108 | + try { | ||
| 109 | + return DeviceId.deviceId(new URI( | ||
| 110 | + SCHEME, info.ip().toString() + ":" + info.port(), null)); | ||
| 111 | + } catch (URISyntaxException e) { | ||
| 112 | + throw new IllegalArgumentException( | ||
| 113 | + "Unable to build deviceID for device " | ||
| 114 | + + info.ip().toString() + ":" + info.ip().toString(), | ||
| 115 | + e); | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + @Override | ||
| 120 | + protected void activate() { | ||
| 121 | + appId = coreService.registerApplication(APP_NAME); | ||
| 122 | + netCfgService.registerConfigFactory(cfgFactory); | ||
| 123 | + netCfgService.addListener(cfgListener); | ||
| 124 | + | ||
| 125 | + super.activate(); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + @Override | ||
| 129 | + protected void deactivate() { | ||
| 130 | + try { | ||
| 131 | + activeDevices.stream().forEach(did -> { | ||
| 132 | + deviceDiscoveryExecutor.execute(() -> disconnectDevice(did)); | ||
| 133 | + }); | ||
| 134 | + deviceDiscoveryExecutor.awaitTermination(1000, TimeUnit.MILLISECONDS); | ||
| 135 | + } catch (InterruptedException e) { | ||
| 136 | + log.error("Device discovery threads did not terminate"); | ||
| 137 | + } | ||
| 138 | + deviceDiscoveryExecutor.shutdownNow(); | ||
| 139 | + netCfgService.unregisterConfigFactory(cfgFactory); | ||
| 140 | + netCfgService.removeListener(cfgListener); | ||
| 141 | + | ||
| 142 | + super.deactivate(); | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + @Override | ||
| 146 | + public void triggerProbe(DeviceId deviceId) { | ||
| 147 | + deviceDiscoveryExecutor.execute(() -> executeProbe(deviceId)); | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + private void executeProbe(DeviceId did) { | ||
| 151 | + boolean reachable = isReachable(did); | ||
| 152 | + log.debug("Probed device: id={}, reachable={}", | ||
| 153 | + did.toString(), | ||
| 154 | + reachable); | ||
| 155 | + if (reachable) { | ||
| 156 | + connectDevice(did); | ||
| 157 | + } else { | ||
| 158 | + disconnectDevice(did); | ||
| 159 | + } | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + @Override | ||
| 163 | + public void roleChanged(DeviceId deviceId, MastershipRole newRole) { | ||
| 164 | + log.debug("roleChanged() is not yet implemented"); | ||
| 165 | + // TODO: implement mastership handling | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + @Override | ||
| 169 | + public boolean isReachable(DeviceId deviceId) { | ||
| 170 | + return ping(deviceId); | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + @Override | ||
| 174 | + public void changePortState(DeviceId deviceId, PortNumber portNumber, boolean enable) { | ||
| 175 | + log.debug("changePortState() is not yet implemented"); | ||
| 176 | + // TODO: implement port handling | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + private void connectDevice(DeviceId did) { | ||
| 180 | + log.debug("Trying to create device on ONOS core: {}", did); | ||
| 181 | + SparseAnnotations annotations = DefaultAnnotations.builder() | ||
| 182 | + .set(AnnotationKeys.PROTOCOL, SCHEME) | ||
| 183 | + .build(); | ||
| 184 | + DeviceDescription descr = new DefaultDeviceDescription( | ||
| 185 | + did.uri(), Device.Type.SWITCH, MANUFACTURER, HW_VERSION, | ||
| 186 | + UNKNOWN, UNKNOWN, new ChassisId(), annotations); | ||
| 187 | + providerService.deviceConnected(did, descr); | ||
| 188 | + activeDevices.add(did); | ||
| 189 | + discoverPorts(did); | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + private void discoverPorts(DeviceId did) { | ||
| 193 | + Device device = deviceService.getDevice(did); | ||
| 194 | + if (device.is(PortDiscovery.class)) { | ||
| 195 | + PortDiscovery portConfig = device.as(PortDiscovery.class); | ||
| 196 | + providerService.updatePorts(did, portConfig.getPorts()); | ||
| 197 | + } else { | ||
| 198 | + log.warn("No PortDiscovery behavior for device {}", did); | ||
| 199 | + } | ||
| 200 | + } | ||
| 201 | + | ||
| 202 | + private void disconnectDevice(DeviceId did) { | ||
| 203 | + log.debug("Trying to remove device from ONOS core: {}", did); | ||
| 204 | + providerService.deviceDisconnected(did); | ||
| 205 | + activeDevices.remove(did); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + /** | ||
| 209 | + * Handles net-cfg events. | ||
| 210 | + */ | ||
| 211 | + private class InternalNetworkConfigListener implements NetworkConfigListener { | ||
| 212 | + | ||
| 213 | + @Override | ||
| 214 | + public void event(NetworkConfigEvent event) { | ||
| 215 | + Bmv2ProviderConfig cfg = netCfgService.getConfig(appId, Bmv2ProviderConfig.class); | ||
| 216 | + if (cfg != null) { | ||
| 217 | + try { | ||
| 218 | + cfg.getDevicesInfo().stream().forEach(info -> { | ||
| 219 | + triggerProbe(deviceIdOf(info)); | ||
| 220 | + }); | ||
| 221 | + } catch (ConfigException e) { | ||
| 222 | + log.error("Unable to read config: " + e); | ||
| 223 | + } | ||
| 224 | + } else { | ||
| 225 | + log.error("Unable to read config (was null)"); | ||
| 226 | + } | ||
| 227 | + } | ||
| 228 | + | ||
| 229 | + @Override | ||
| 230 | + public boolean isRelevant(NetworkConfigEvent event) { | ||
| 231 | + return event.configClass().equals(Bmv2ProviderConfig.class) && | ||
| 232 | + (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED || | ||
| 233 | + event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED); | ||
| 234 | + } | ||
| 235 | + } | ||
| 236 | +} |
| 1 | +/* | ||
| 2 | + * Copyright 2014-2016 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 | +package org.onosproject.provider.bmv2.device.impl; | ||
| 18 | + | ||
| 19 | +import com.fasterxml.jackson.databind.JsonNode; | ||
| 20 | +import com.google.common.annotations.Beta; | ||
| 21 | +import com.google.common.collect.Sets; | ||
| 22 | +import org.onlab.packet.IpAddress; | ||
| 23 | +import org.onosproject.core.ApplicationId; | ||
| 24 | +import org.onosproject.incubator.net.config.basics.ConfigException; | ||
| 25 | +import org.onosproject.net.config.Config; | ||
| 26 | + | ||
| 27 | +import java.util.Set; | ||
| 28 | + | ||
| 29 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Configuration decoder for Bmv2 provider. | ||
| 33 | + */ | ||
| 34 | +@Beta | ||
| 35 | +public class Bmv2ProviderConfig extends Config<ApplicationId> { | ||
| 36 | + public static final String CONFIG_VALUE_ERROR = "Error parsing config value"; | ||
| 37 | + private static final String IP = "ip"; | ||
| 38 | + private static final int DEFAULT_THRIFT_PORT = 9090; | ||
| 39 | + private static final String PORT = "port"; | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * Retrieves a set of Bmv2DeviceInfo containing all the device | ||
| 43 | + * configuration pertaining to the Bmv2 device provider. | ||
| 44 | + * | ||
| 45 | + * @return set of device configurations. | ||
| 46 | + * @throws ConfigException if configuration can't be read | ||
| 47 | + */ | ||
| 48 | + public Set<Bmv2DeviceInfo> getDevicesInfo() throws ConfigException { | ||
| 49 | + Set<Bmv2DeviceInfo> deviceInfos = Sets.newHashSet(); | ||
| 50 | + | ||
| 51 | + try { | ||
| 52 | + for (JsonNode node : array) { | ||
| 53 | + String ip = node.path(IP).asText(); | ||
| 54 | + IpAddress ipAddr = ip.isEmpty() ? null : IpAddress.valueOf(ip); | ||
| 55 | + int port = node.path(PORT).asInt(DEFAULT_THRIFT_PORT); | ||
| 56 | + deviceInfos.add(new Bmv2DeviceInfo(ipAddr, port)); | ||
| 57 | + | ||
| 58 | + } | ||
| 59 | + } catch (IllegalArgumentException e) { | ||
| 60 | + throw new ConfigException(CONFIG_VALUE_ERROR, e); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + return deviceInfos; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * Contains information about a Bmv2 device retrieved from the net-cfg | ||
| 68 | + * subsystem. | ||
| 69 | + */ | ||
| 70 | + public static class Bmv2DeviceInfo { | ||
| 71 | + private final IpAddress ip; | ||
| 72 | + private final int port; | ||
| 73 | + | ||
| 74 | + /** | ||
| 75 | + * Build an information object containing the given device specifics. | ||
| 76 | + * | ||
| 77 | + * @param ip ip | ||
| 78 | + * @param port port | ||
| 79 | + */ | ||
| 80 | + public Bmv2DeviceInfo(IpAddress ip, int port) { | ||
| 81 | + // TODO use generalized host string instead of IP address | ||
| 82 | + this.ip = checkNotNull(ip, "ip cannot be null"); | ||
| 83 | + this.port = checkNotNull(port, "port cannot be null"); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + /** | ||
| 87 | + * Returns IpAddress of the device. | ||
| 88 | + * | ||
| 89 | + * @return ip | ||
| 90 | + */ | ||
| 91 | + public IpAddress ip() { | ||
| 92 | + return ip; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + /** | ||
| 96 | + * Returns port of the device. | ||
| 97 | + * | ||
| 98 | + * @return port | ||
| 99 | + */ | ||
| 100 | + public int port() { | ||
| 101 | + return port; | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | +} |
providers/bmv2/device/src/main/java/org/onosproject/provider/bmv2/device/impl/package-info.java
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright 2014-2016 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 use BMv2 Thrift RPCs as a mean of infrastructure device discovery. | ||
| 19 | + */ | ||
| 20 | +package org.onosproject.provider.bmv2.device.impl; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
providers/bmv2/pom.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!-- | ||
| 3 | + ~ Copyright 2014-2016 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 | + | ||
| 18 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
| 19 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| 20 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
| 21 | + <parent> | ||
| 22 | + <artifactId>onos-providers</artifactId> | ||
| 23 | + <groupId>org.onosproject</groupId> | ||
| 24 | + <version>1.6.0-SNAPSHOT</version> | ||
| 25 | + </parent> | ||
| 26 | + | ||
| 27 | + <modelVersion>4.0.0</modelVersion> | ||
| 28 | + | ||
| 29 | + <artifactId>onos-bmv2-providers</artifactId> | ||
| 30 | + <packaging>pom</packaging> | ||
| 31 | + | ||
| 32 | + <description>ONOS BMv2 providers</description> | ||
| 33 | + | ||
| 34 | + <modules> | ||
| 35 | + <module>app</module> | ||
| 36 | + <module>device</module> | ||
| 37 | + </modules> | ||
| 38 | + | ||
| 39 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -45,6 +45,7 @@ | ... | @@ -45,6 +45,7 @@ |
| 45 | <module>lldpcommon</module> | 45 | <module>lldpcommon</module> |
| 46 | <module>lldp</module> | 46 | <module>lldp</module> |
| 47 | <module>netcfglinks</module> | 47 | <module>netcfglinks</module> |
| 48 | + <module>bmv2</module> | ||
| 48 | </modules> | 49 | </modules> |
| 49 | 50 | ||
| 50 | <dependencies> | 51 | <dependencies> | ... | ... |
-
Please register or login to post a comment