Andrea Campanella
Committed by Gerrit Code Review

[ONOS-3943] SNMP protocol and provider refactoring according to ONOS architecture

Change-Id: Ie87ee6c181c9550ffac602397f2ee74a691bbdfa
Showing 33 changed files with 1066 additions and 207 deletions
SRC = 'src/main/java/org/onosproject/**/'
CURRENT_NAME = 'onos-drivers-bti'
CURRENT_TARGET = ':' + CURRENT_NAME
COMPILE_DEPS = [
'//lib:CORE_DEPS',
'//protocols/netconf/api:onos-snmp-api',
'//incubator/api:onos-incubator-api'
]
java_library(
name = CURRENT_NAME,
srcs = glob([SRC + '/*.java']),
deps = COMPILE_DEPS,
visibility = ['PUBLIC'],
resources_root = 'src/main/resources',
resources = glob(['src/main/resources/**']),
)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
~ Copyright 2016 Open Networking Laboratory
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
<feature name="${project.artifactId}" version="${project.version}"
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-snmp-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-incubator-api/${project.version}</bundle>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Open Networking Laboratory
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.6.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-drivers-bti</artifactId>
<packaging>bundle</packaging>
<properties>
<onos.app.name>org.onosproject.drivers.bti</onos.app.name>
<onos.app.origin>ON.Lab</onos.app.origin>
<onos.app.category>Drivers</onos.app.category>
<onos.app.title>Bti Device Drivers</onos.app.title>
<onos.app.url>http://onosproject.org</onos.app.url>
<onos.app.requires>
org.onosproject.snmp
</onos.app.requires>
</properties>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-snmp-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
......@@ -11,43 +13,87 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
package org.onosproject.drivers.bti;
import com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0.I_Device;
import com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0._OidRegistry;
import com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0.mib_2.System;
import com.btisystems.pronx.ems.core.model.ClassRegistry;
import com.btisystems.pronx.ems.core.model.IClassRegistry;
import com.btisystems.pronx.ems.core.model.NetworkDevice;
import com.btisystems.pronx.ems.core.snmp.ISnmpConfiguration;
import com.btisystems.pronx.ems.core.snmp.ISnmpSession;
import com.btisystems.pronx.ems.core.snmp.V2cSnmpConfiguration;
import com.google.common.collect.ImmutableList;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.SparseAnnotations;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceDescriptionDiscovery;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.PortDescription;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.snmp.SnmpController;
import org.onosproject.snmp.SnmpDevice;
import org.slf4j.Logger;
import org.snmp4j.smi.OID;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
/**
* A vendor-specific implementation supporting BTI Systems BTI-7000 equipment.
* @deprecated 1.5.0 Falcon, not compliant with ONOS SB and driver architecture.
* Bti 7000 SNMP device description behaviour. Provides device description and port information.
*/
@Deprecated
public class Bti7000DeviceDescriptionProvider implements SnmpDeviceDescriptionProvider {
public class Bti7000DeviceDescriptor extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery {
private final Logger log = getLogger(getClass());
protected static final IClassRegistry CLASS_REGISTRY =
new ClassRegistry(_OidRegistry.oidRegistry, I_Device.class);
private static final String UNKNOWN = "unknown";
@Override
public DeviceDescription populateDescription(ISnmpSession session, DeviceDescription description) {
public DeviceDescription discoverDeviceDetails() {
SnmpController controller = checkNotNull(handler().get(SnmpController.class));
DeviceId deviceId = handler().data().deviceId();
SnmpDevice snmpDevice = controller.getDevice(deviceId);
DeviceService deviceService = checkNotNull(handler().get(DeviceService.class));
Device device = deviceService.getDevice(deviceId);
DeviceDescription desc = null;
String ipAddress = snmpDevice.getSnmpHost();
int port = snmpDevice.getSnmpPort();
ISnmpConfiguration config = new V2cSnmpConfiguration();
config.setPort(port);
try (ISnmpSession session = controller.getSession(deviceId)) {
// Each session will be auto-closed.
String deviceOid = session.identifyDevice();
desc = populateDescription(session, device);
} catch (IOException | RuntimeException ex) {
log.error("Failed to walk device.", ex.getMessage());
log.debug("Detailed problem was ", ex);
}
return desc;
}
@Override
public List<PortDescription> discoverPortDetails() {
//TODO implement
return ImmutableList.of();
}
private DeviceDescription populateDescription(ISnmpSession session, Device device) {
NetworkDevice networkDevice = new NetworkDevice(CLASS_REGISTRY,
session.getAddress().getHostAddress());
try {
session.walkDevice(networkDevice, Arrays.asList(new OID[]{
CLASS_REGISTRY.getClassToOidMap().get(
com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0.mib_2.System.class)}));
session.walkDevice(networkDevice, Collections.singletonList(CLASS_REGISTRY.getClassToOidMap().get(
System.class)));
com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0.mib_2.System systemTree =
(com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0.mib_2.System)
......@@ -55,14 +101,14 @@ public class Bti7000DeviceDescriptionProvider implements SnmpDeviceDescriptionPr
com.btisystems.mibbler.mibs.bti7000.bti7000_13_2_0.mib_2.System.class));
if (systemTree != null) {
String[] systemComponents = systemTree.getSysDescr().split(";");
return new DefaultDeviceDescription(description.deviceUri(), description.type(),
systemComponents[0], systemComponents[2], systemComponents[3],
UNKNOWN, description.chassisId(), description.annotations());
return new DefaultDeviceDescription(device.id().uri(), device.type(),
systemComponents[0], systemComponents[2],
systemComponents[3], UNKNOWN, device.chassisId(),
(SparseAnnotations) device.annotations());
}
} catch (IOException ex) {
log.error("Error reading details for device {}.", session.getAddress(), ex);
throw new IllegalArgumentException("Error reading details for device." + session.getAddress(), ex);
}
return description;
return null;
}
}
......
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.drivers.bti;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.net.driver.AbstractDriverLoader;
/**
* Loader for BTI device drivers.
*/
@Component(immediate = true)
public class BtiDriversLoader extends AbstractDriverLoader {
public BtiDriversLoader() {
super("/bti-drivers.xml");
}
}
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
......@@ -11,44 +13,91 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
package org.onosproject.drivers.bti;
import com.btisystems.mibbler.mibs.netsnmp.netsnmp.I_Device;
import com.btisystems.mibbler.mibs.netsnmp.netsnmp._OidRegistry;
import com.btisystems.mibbler.mibs.netsnmp.netsnmp.mib_2.System;
import com.btisystems.pronx.ems.core.model.ClassRegistry;
import com.btisystems.pronx.ems.core.model.IClassRegistry;
import com.btisystems.pronx.ems.core.model.NetworkDevice;
import com.btisystems.pronx.ems.core.snmp.ISnmpConfiguration;
import com.btisystems.pronx.ems.core.snmp.ISnmpSession;
import com.btisystems.pronx.ems.core.snmp.V2cSnmpConfiguration;
import com.google.common.collect.ImmutableList;
import org.apache.commons.lang.StringUtils;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.SparseAnnotations;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceDescriptionDiscovery;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.PortDescription;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.snmp.SnmpController;
import org.onosproject.snmp.SnmpDevice;
import org.slf4j.Logger;
import org.snmp4j.smi.OID;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
/**
* A agent-specific implementation supporting NET-SNMP agents.
* @deprecated 1.5.0 Falcon, not compliant with ONOS SB and driver architecture.
* Net SNMP device description behaviour. Provides device description and port information.
*/
@Deprecated
public class NetSnmpDeviceDescriptionProvider implements SnmpDeviceDescriptionProvider {
public class NetSnmpDeviceDescriptor extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery {
private final Logger log = getLogger(getClass());
protected static final IClassRegistry CLASS_REGISTRY =
new ClassRegistry(_OidRegistry.oidRegistry, I_Device.class);
private static final String UNKNOWN = "unknown";
//TODO evaluate a common abstract class for all Snmp description discovery
@Override
public DeviceDescription discoverDeviceDetails() {
SnmpController controller = checkNotNull(handler().get(SnmpController.class));
DeviceId deviceId = handler().data().deviceId();
SnmpDevice snmpDevice = controller.getDevice(deviceId);
DeviceService deviceService = checkNotNull(handler().get(DeviceService.class));
Device device = deviceService.getDevice(deviceId);
DeviceDescription desc = null;
String ipAddress = snmpDevice.getSnmpHost();
int port = snmpDevice.getSnmpPort();
ISnmpConfiguration config = new V2cSnmpConfiguration();
config.setPort(port);
try (ISnmpSession session = controller.getSession(deviceId)) {
// Each session will be auto-closed.
String deviceOid = session.identifyDevice();
//TODO obtain desctiption
desc = populateDescription(session, device);
} catch (IOException | RuntimeException ex) {
log.error("Failed to walk device.", ex.getMessage());
log.debug("Detailed problem was ", ex);
}
return desc;
}
@Override
public DeviceDescription populateDescription(ISnmpSession session, DeviceDescription description) {
public List<PortDescription> discoverPortDetails() {
//TODO implement
return ImmutableList.of();
}
private DeviceDescription populateDescription(ISnmpSession session, Device device) {
NetworkDevice networkDevice = new NetworkDevice(CLASS_REGISTRY,
session.getAddress().getHostAddress());
try {
session.walkDevice(networkDevice, Arrays.asList(new OID[]{
CLASS_REGISTRY.getClassToOidMap().get(
com.btisystems.mibbler.mibs.netsnmp.netsnmp.mib_2.System.class)}));
session.walkDevice(networkDevice, Collections.singletonList(CLASS_REGISTRY.getClassToOidMap().get(
System.class)));
com.btisystems.mibbler.mibs.netsnmp.netsnmp.mib_2.System systemTree =
(com.btisystems.mibbler.mibs.netsnmp.netsnmp.mib_2.System)
......@@ -58,13 +107,13 @@ public class NetSnmpDeviceDescriptionProvider implements SnmpDeviceDescriptionPr
// TODO SNMP sys-contacts may be verbose; ONOS-GUI doesn't abbreviate fields neatly;
// so cut it here until supported in prop displayer
String manufacturer = StringUtils.abbreviate(systemTree.getSysContact(), 20);
return new DefaultDeviceDescription(description.deviceUri(), description.type(), manufacturer,
UNKNOWN, UNKNOWN, UNKNOWN, description.chassisId(), description.annotations());
return new DefaultDeviceDescription(device.id().uri(), device.type(),
manufacturer, UNKNOWN, UNKNOWN, UNKNOWN,
device.chassisId(), (SparseAnnotations) device.annotations());
}
} catch (IOException ex) {
log.error("Error reading details for device {}.", session.getAddress(), ex);
throw new IllegalArgumentException("Error reading details for device." + session.getAddress(), ex);
}
return description;
return null;
}
}
......
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -14,17 +14,7 @@
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
/**
* The Device State is used to determine whether the device is active or inactive. This state information will help
* Device Creator to add or delete the device from the core.
/**
* Package for BTI device drivers.
*/
public enum DeviceState {
/* Used to specify Active state of the device */
ACTIVE,
/* Used to specify inactive state of the device */
INACTIVE,
/* Used to specify invalid state of the device */
INVALID
}
package org.onosproject.drivers.bti;
\ No newline at end of file
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Open Networking Laboratory
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<drivers>
<driver name="bti7000" manufacturer="bti" hwVersion="1.0.0" swVersion="1.0.0">
<behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
impl="org.onosproject.drivers.bti.Bti7000DeviceDescriptor"/>
</driver>
<driver name="NetSnmp" manufacturer="bti" hwVersion="1.0.0" swVersion="1.0.0">
<behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
impl="org.onosproject.drivers.bti.NetSnmpDeviceDescriptor"/>
</driver>
</drivers>
......@@ -20,8 +20,6 @@
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-restsb-api/${project.version}</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.snmp4j/2.3.4_1</bundle>
</feature>
......
......@@ -35,6 +35,9 @@
<onos.app.category>Drivers</onos.app.category>
<onos.app.title>Lumentum Device Drivers</onos.app.title>
<onos.app.url>http://onosproject.org</onos.app.url>
<onos.app.requires>
org.onosproject.snmp
</onos.app.requires>
</properties>
<dependencies>
......
......@@ -19,9 +19,14 @@ package org.onosproject.drivers.lumentum;
import com.google.common.collect.Lists;
import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.DefaultAnnotations;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.SparseAnnotations;
import org.onosproject.net.behaviour.PortDiscovery;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceDescriptionDiscovery;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.OmsPortDescription;
import org.onosproject.net.device.PortDescription;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
......@@ -34,22 +39,37 @@ import java.io.IOException;
import java.util.Collections;
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
/**
* Discovers the ports of a Lumentum SDN ROADM device using SNMP.
* Device description behaviour for Lumentum Snmp devices.
*/
public class PortDiscoveryLumentumRoadm extends AbstractHandlerBehaviour
implements PortDiscovery {
public class LumentumRoadmDeviceDescription extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery {
private final Logger log = getLogger(PortDiscoveryLumentumRoadm.class);
private final Logger log = getLogger(getClass());
private static final String CTRL_PORT_STATE = ".1.3.6.1.4.1.46184.1.4.1.1.3.";
private LumentumSnmpDevice snmp;
@Override
public List<PortDescription> getPorts() {
public DeviceDescription discoverDeviceDetails() {
//TODO get device description
DeviceService deviceService = checkNotNull(handler().get(DeviceService.class));
DeviceId deviceId = handler().data().deviceId();
Device device = deviceService.getDevice(deviceId);
return new DefaultDeviceDescription(device.id().uri(), Device.Type.ROADM,
"Lumentum", "SDN ROADM", "1.0", "v1",
device.chassisId(), (SparseAnnotations) device.annotations());
}
@Override
public List<PortDescription> discoverPortDetails() {
return this.getPorts();
}
private List<PortDescription> getPorts() {
try {
snmp = new LumentumSnmpDevice(handler().data().deviceId());
} catch (IOException e) {
......@@ -119,5 +139,3 @@ public class PortDiscoveryLumentumRoadm extends AbstractHandlerBehaviour
return ports;
}
}
......
......@@ -16,8 +16,8 @@
-->
<drivers>
<driver name="lumentum" manufacturer="Lumentum" hwVersion="SDN ROADM" swVersion="1.0">
<behaviour api="org.onosproject.net.behaviour.PortDiscovery"
impl="org.onosproject.drivers.lumentum.PortDiscoveryLumentumRoadm"/>
<behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
impl="org.onosproject.drivers.lumentum.LumentumRoadmDeviceDescription"/>
<behaviour api="org.onosproject.net.behaviour.LambdaQuery"
impl="org.onosproject.drivers.lumentum.LambdaQueryLumentumRoadm"/>
<behaviour api="org.onosproject.net.flow.FlowRuleProgrammable"
......
......@@ -40,6 +40,7 @@
<module>ovsdb</module>
<module>utilities</module>
<module>lumentum</module>
<module>bti</module>
</modules>
<!--<properties>
......
......@@ -40,6 +40,7 @@
<module>rest</module>
<module>ospf</module>
<module>isis</module>
<module>snmp</module>
</modules>
<dependencies>
......
SRC = 'src/main/java/org/onosproject/**/'
CURRENT_NAME = 'onos-snmp-api'
CURRENT_TARGET = ':' + CURRENT_NAME
COMPILE_DEPS = [
'//lib:CORE_DEPS',
'//incubator/api:onos-incubator-api',
'//lib:org.apache.servicemix.bundles.snmp4j',
'//lib:snmp-core',
'//lib:bti7000',
'//lib:mibs-net-snmp',
'//lib:mibs-rfc',
]
java_library(
name = CURRENT_NAME,
srcs = glob([SRC + '/*.java']),
deps = COMPILE_DEPS,
visibility = ['PUBLIC'],
)
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Open Networking Laboratory
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-snmp-protocol</artifactId>
<groupId>org.onosproject</groupId>
<version>1.6.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-snmp-api</artifactId>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.snmp;
import com.btisystems.pronx.ems.core.snmp.ISnmpSession;
import org.onosproject.incubator.net.faultmanagement.alarm.DefaultAlarm;
import org.onosproject.net.DeviceId;
import java.io.IOException;
import java.util.Collection;
/**
* Snmp Controller.
*/
public interface SnmpController {
/**
* Return all the devices that this controller has notion of.
* @return Set of all Snmp devices
*/
Collection<SnmpDevice> getDevices();
/**
* Gets a device for a specific deviceId.
* @param deviceId device id of the device
* @return SnmpDevice for given deviceId
*/
SnmpDevice getDevice(DeviceId deviceId);
/**
* Removes a specific device.
* @param deviceId device id of the device to be removed
*/
void removeDevice(DeviceId deviceId);
/**
* Add a device with a specific DeviceId.
* @param deviceId deviceId of the device
* @param device device to add to this controller
*/
void addDevice(DeviceId deviceId, SnmpDevice device);
/**
* Gets an Instance of ISnmpSession for a specific device.
*
* @param deviceId device to retrieve the session for.
* @return ISnmp session.
* @throws IOException if the session can't be established.
*/
ISnmpSession getSession(DeviceId deviceId) throws IOException;
/**
* Creates an error alarm if the interaction with the device failed.
*
* @param deviceId the device with a failed interaction
* @return default alarm error
*/
DefaultAlarm buildWalkFailedAlarm(DeviceId deviceId);
}
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.snmp;
import org.onosproject.net.DeviceId;
/**
* Abstraction a default Snmp Device.
*/
public interface SnmpDevice {
/**
* Returns host IP and host Port, used by this particular SNMP Device.
*
* @return Device Information.
*/
String deviceInfo();
/**
* Terminates the device connection.
*/
void disconnect();
/**
* Retrieves the device state.
*
* @return true if connected
*/
boolean isReachable();
/**
* Returns the IP used connect ssh on the device.
*
* @return SNMP Device IP
*/
String getSnmpHost();
/**
* Returns the SSH Port used connect the device.
*
* @return SSH Port number
*/
int getSnmpPort();
/**
* Retrieves the username of the device.
*
* @return username
*/
String getUsername();
/**
* Retrieves the community (password) of the device.
*
* @return password
*/
String getCommunity();
/**
* Return the SNMP device deviceID.
*
* @return DeviceId
*/
DeviceId deviceId();
}
......@@ -13,27 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
import com.btisystems.pronx.ems.core.snmp.ISnmpSession;
import org.onosproject.net.Device;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Device description provider for Lumentum SDN ROADMs.
* @deprecated 1.5.0 Falcon, not compliant with ONOS SB and driver architecture.
* Package for SNMP apis interfaces.
*/
@Deprecated
public class LumentumDeviceDescriptionProvider implements SnmpDeviceDescriptionProvider {
private static final Logger log = LoggerFactory.getLogger(LumentumDeviceDescriptionProvider.class);
@Override
public DeviceDescription populateDescription(ISnmpSession session, DeviceDescription description) {
return new DefaultDeviceDescription(description.deviceUri(), Device.Type.ROADM,
"Lumentum", "SDN ROADM", "1.0", "v1", description.chassisId(), description.annotations());
}
}
package org.onosproject.snmp;
......
SRC = 'src/main/java/org/onosproject/**/'
TEST = 'src/test/java/org/onosproject/**/'
CURRENT_NAME = 'onos-snmp-ctl'
CURRENT_TARGET = ':' + CURRENT_NAME
COMPILE_DEPS = [
'//lib:CORE_DEPS',
'//incubator/api:onos-incubator-api',
'//protocols/snmp/api:onos-snmp-api',
'//lib:org.apache.servicemix.bundles.snmp4j',
'//lib:snmp-core',
'//lib:bti7000',
'//lib:mibs-net-snmp',
'//lib:mibs-rfc',
]
TEST_DEPS = [
'//lib:TEST',
]
java_library(
name = CURRENT_NAME,
srcs = glob([SRC + '/*.java']),
deps = COMPILE_DEPS,
visibility = ['PUBLIC'],
)
java_test(
name = 'tests',
srcs = glob([TEST + '/*.java']),
deps = COMPILE_DEPS +
TEST_DEPS +
[CURRENT_TARGET],
source_under_test = [CURRENT_TARGET],
)
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Open Networking Laboratory
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-snmp-protocol</artifactId>
<groupId>org.onosproject</groupId>
<version>1.6.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-snmp-ctl</artifactId>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-snmp-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.snmp.ctl;
import com.btisystems.pronx.ems.core.snmp.DefaultSnmpConfigurationFactory;
import com.btisystems.pronx.ems.core.snmp.ISnmpConfiguration;
import com.btisystems.pronx.ems.core.snmp.ISnmpSession;
import com.btisystems.pronx.ems.core.snmp.ISnmpSessionFactory;
import com.btisystems.pronx.ems.core.snmp.SnmpSessionFactory;
import com.btisystems.pronx.ems.core.snmp.V2cSnmpConfiguration;
import com.google.common.base.Preconditions;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.incubator.net.faultmanagement.alarm.Alarm;
import org.onosproject.incubator.net.faultmanagement.alarm.DefaultAlarm;
import org.onosproject.net.DeviceId;
import org.onosproject.snmp.SnmpController;
import org.onosproject.snmp.SnmpDevice;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Default implementation of the SNMP sub-controller.
*/
@Component(immediate = true)
@Service
public class DefaultSnmpController implements SnmpController {
private final Logger log = LoggerFactory
.getLogger(getClass());
private ISnmpSessionFactory sessionFactory;
private final Map<DeviceId, ISnmpSession> sessionMap = new HashMap<>();
protected Map<DeviceId, SnmpDevice> snmpDeviceMap = new ConcurrentHashMap<>();
@Activate
public void activate(ComponentContext context) {
sessionFactory = new SnmpSessionFactory(
new DefaultSnmpConfigurationFactory(new V2cSnmpConfiguration()));
log.info("Started");
}
@Deactivate
public void deactivate() {
snmpDeviceMap.clear();
log.info("Stopped");
}
@Override
public ISnmpSession getSession(DeviceId deviceId) throws IOException {
if (!sessionMap.containsKey(deviceId)) {
SnmpDevice device = snmpDeviceMap.get(deviceId);
String ipAddress = null;
int port = -1;
if (device != null) {
ipAddress = device.getSnmpHost();
port = device.getSnmpPort();
} else {
String[] deviceComponents = deviceId.toString().split(":");
if (deviceComponents.length > 1) {
ipAddress = deviceComponents[1];
port = Integer.parseInt(deviceComponents[2]);
} else {
log.error("Cannot obtain correct information from device id", deviceId);
}
}
Preconditions.checkNotNull(ipAddress, "ip address is empty, cannot start session");
Preconditions.checkArgument(port != -1, "port is incorrect, cannot start session");
ISnmpConfiguration config = new V2cSnmpConfiguration();
config.setPort(port);
sessionMap.put(deviceId, sessionFactory.createSession(config, ipAddress));
}
return sessionMap.get(deviceId);
}
@Override
public Collection<SnmpDevice> getDevices() {
return snmpDeviceMap.values();
}
@Override
public SnmpDevice getDevice(DeviceId did) {
return snmpDeviceMap.get(did);
}
@Override
public void removeDevice(DeviceId did) {
snmpDeviceMap.remove(did);
}
@Override
public void addDevice(DeviceId did, SnmpDevice device) {
snmpDeviceMap.put(did, device);
}
@Override
public DefaultAlarm buildWalkFailedAlarm(DeviceId deviceId) {
return new DefaultAlarm.Builder(
deviceId, "SNMP alarm retrieval failed",
Alarm.SeverityLevel.CRITICAL,
System.currentTimeMillis()).build();
}
}
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,122 +13,105 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
package org.onosproject.snmp.ctl;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
import org.onosproject.net.DeviceId;
import org.onosproject.snmp.SnmpDevice;
import org.slf4j.Logger;
import java.net.URI;
import java.net.URISyntaxException;
import org.slf4j.Logger;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
/**
* This is a logical representation of actual SNMP device, carrying all the necessary information to connect and execute
* SNMP operations.
*/
public class SnmpDevice {
public class DefaultSnmpDevice implements SnmpDevice {
private final Logger log = getLogger(SnmpDevice.class);
private final Logger log = getLogger(DefaultSnmpDevice.class);
private static final int DEFAULT_SNMP_PORT = 161;
private static final String SCHEME = "snmp";
private final String snmpHost;
private final DeviceId deviceId;
private int snmpPort = DEFAULT_SNMP_PORT;
private final String username;
//Community is a conventional name for password in SNMP.
private final String community;
private boolean reachable = false;
private DeviceState deviceState = DeviceState.INVALID;
protected SnmpDevice(String snmpHost, int snmpPort, String community) {
public DefaultSnmpDevice(String snmpHost, int snmpPort, String username, String community) {
this.snmpHost = checkNotNull(snmpHost, "SNMP Device IP cannot be null");
this.snmpPort = checkNotNull(snmpPort, "SNMP Device snmp port cannot be null");
this.snmpPort = checkNotNull(snmpPort, "SNMP Device port cannot be null");
this.username = username;
this.community = community;
}
/**
* This will try to connect to SNMP device.
*
*/
public void init() {
this.deviceId = createDeviceId();
reachable = true;
}
/**
* This would return host IP and host Port, used by this particular SNMP Device.
*
* @return Device Information.
*/
@Override
public String deviceInfo() {
return new StringBuilder("host: ").append(snmpHost).append(". port: ")
.append(snmpPort).toString();
}
/**
* This will terminate the device connection.
*/
@Override
public void disconnect() {
log.info("disconnect");
reachable = false;
}
/**
* This api is intended to know whether the device is connected or not.
*
* @return true if connected
*/
@Override
public boolean isReachable() {
return reachable;
}
/**
* This will return the IP used connect ssh on the device.
*
* @return SNMP Device IP
*/
@Override
public String getSnmpHost() {
return snmpHost;
}
/**
* This will return the SSH Port used connect the device.
*
* @return SSH Port number
*/
@Override
public int getSnmpPort() {
return snmpPort;
}
@Override
public String getUsername() {
return username;
}
@Override
public String getCommunity() {
return community;
}
/**
* Retrieve current state of the device.
*
* @return Current Device State
*/
public DeviceState getDeviceState() {
return deviceState;
@Override
public DeviceId deviceId() {
return deviceId;
}
/**
* This is set the state information for the device.
*
* @param deviceState Next Device State
*/
public void setDeviceState(DeviceState deviceState) {
this.deviceState = deviceState;
private DeviceId createDeviceId() {
String additionalSsp = new StringBuilder(
snmpHost).append(":")
.append(snmpPort).toString();
try {
return DeviceId.deviceId(new URI(SCHEME, additionalSsp,
null));
} catch (URISyntaxException e) {
log.error("Syntax Error while creating URI for the device: "
+ additionalSsp
+ " couldn't persist the device onto the store", e);
throw new IllegalArgumentException("Can't create device ID from " + additionalSsp, e);
}
/**
* Check whether the device is in Active state.
*
* @return true if the device is Active
*/
public boolean isActive() {
return deviceState == DeviceState.ACTIVE;
}
}
......
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
......@@ -11,25 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
import com.btisystems.pronx.ems.core.snmp.ISnmpSession;
import org.onosproject.net.device.DeviceDescription;
/**
* Abstraction of an entity which updates a device description with information retrieved via SNMP.
* @deprecated 1.5.0 Falcon, not compliant with ONOS SB and driver architecture.
*/
@Deprecated
public interface SnmpDeviceDescriptionProvider {
/**
* Generated an updated device description.
* @deprecated 1.5.0 Falcon
* @param session SNMP session
* @param description old device description
* @return new updated description
* Package for implementation fo SNMP elements.
*/
@Deprecated
DeviceDescription populateDescription(ISnmpSession session, DeviceDescription description);
}
package org.onosproject.snmp.ctl;
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Open Networking Laboratory
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-protocols</artifactId>
<groupId>org.onosproject</groupId>
<version>1.6.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-snmp-protocol</artifactId>
<packaging>pom</packaging>
<modules>
<module>api</module>
<module>ctl</module>
</modules>
<dependencies>
<dependency>
<groupId>com.btisystems</groupId>
<artifactId>snmp-core</artifactId>
<version>1.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.btisystems.mibbler.mibs</groupId>
<artifactId>bti7000</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.btisystems.mibbler.mibs</groupId>
<artifactId>net-snmp</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -11,9 +11,8 @@ COMPILE_DEPS = [
'//lib:bti7000',
'//lib:mibs-net-snmp',
'//lib:mibs-rfc',
'//protocols/ovsdb/api:onos-ovsdb-api',
'//protocols/ovsdb/rfc:onos-ovsdb-rfc',
'//incubator/api:onos-incubator-api',
'//protocols/snmp/api:onos-snmp-api',
]
TEST_DEPS = [
......
......@@ -21,4 +21,12 @@
<description>${project.description}</description>
<artifact>mvn:${project.groupId}/onos-snmp-provider-device/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-snmp-provider-alarm/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-snmp-api/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-snmp-ctl/${project.version}</artifact>
<artifact>mvn:com.btisystems/snmp-core/1.3-SNAPSHOT</artifact>
<artifact>mvn:com.btisystems.mibbler.mibs/bti7000/1.0-SNAPSHOT</artifact>
<artifact>mvn:com.btisystems.mibbler.mibs/net-snmp/1.0-SNAPSHOT</artifact>
</app>
......
......@@ -19,9 +19,12 @@
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:io.netty/netty/3.9.2.Final</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.snmp4j/2.3.4_1</bundle>
<bundle>mvn:${project.groupId}/onos-snmp-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-snmp-ctl/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-snmp-provider-device/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-snmp-provider-alarm/${project.version}</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.snmp4j/2.3.4_1</bundle>
<bundle>mvn:com.btisystems/snmp-core/1.3-SNAPSHOT</bundle>
<bundle>mvn:com.btisystems.mibbler.mibs/bti7000/1.0-SNAPSHOT</bundle>
<bundle>mvn:com.btisystems.mibbler.mibs/net-snmp/1.0-SNAPSHOT</bundle>
......
......@@ -11,9 +11,9 @@ COMPILE_DEPS = [
'//lib:bti7000',
'//lib:mibs-net-snmp',
'//lib:mibs-rfc',
'//protocols/ovsdb/api:onos-ovsdb-api',
'//protocols/ovsdb/rfc:onos-ovsdb-rfc',
'//incubator/api:onos-incubator-api',
'//protocols/snmp/api:onos-snmp-api',
'//protocols/snmp/ctl:onos-snmp-ctl',
]
TEST_DEPS = [
......
......@@ -36,20 +36,50 @@
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
</dependency>
<!-- <dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-snmp-api</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator-api</artifactId>
<artifactId>onos-snmp-ctl</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
<version>2.3.4_1</version>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.btisystems</groupId>
<artifactId>snmp-core</artifactId>
<version>1.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.btisystems.mibbler.mibs</groupId>
<artifactId>bti7000</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.btisystems.mibbler.mibs</groupId>
<artifactId>net-snmp</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-core-serializers</artifactId>
<version>${project.version}</version>
</dependency>-->
<artifactId>onos-core-net</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
......
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.provider.snmp.device.impl;
/*
* 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.
*/
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 decoder for SNMP provider.
*/
@Beta
public class SnmpProviderConfig 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 = "username";
private static final String PASSWORD = "password";
/**
* Retrieves a set of SnmpDeviceInfo containing all the device
* configuration pertaining to the SNMP device provider.
* @return set of device configurations.
*
* @throws ConfigException if configuration can't be read
*/
public Set<SnmpDeviceInfo> getDevicesInfo() throws ConfigException {
Set<SnmpDeviceInfo> deviceInfos = 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();
deviceInfos.add(new SnmpDeviceInfo(ipAddr, port, name, password));
}
} catch (IllegalArgumentException e) {
throw new ConfigException(CONFIG_VALUE_ERROR, e);
}
return deviceInfos;
}
/**
* Contains information about a SNMP device retrieved form the net-cfg subsystem.
*/
public class SnmpDeviceInfo {
private final IpAddress ip;
private final int port;
private final String username;
private final String password;
/**
* Build an information object containing the given device specifics.
* @param ip ip
* @param port port
* @param username username
* @param password password (a.k.a community in SNMP)
*/
public SnmpDeviceInfo(IpAddress ip, int port, String username, String password) {
this.ip = ip;
this.port = port;
this.username = username;
this.password = password;
}
/**
* Returns IpAddress of the device.
* @return ip
*/
public IpAddress ip() {
return ip;
}
/**
* Returns port of the device.
* @return port
*/
public int port() {
return port;
}
/**
* Returns username of the device.
* @return username
*/
public String username() {
return username;
}
/**
* Returns password of the device.
* @return password
*/
public String password() {
return password;
}
}
}
......@@ -37,37 +37,6 @@
<module>alarm</module>
</modules>
<dependencies>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
<version>2.3.4_1</version>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.btisystems</groupId>
<artifactId>snmp-core</artifactId>
<version>1.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.btisystems.mibbler.mibs</groupId>
<artifactId>bti7000</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.btisystems.mibbler.mibs</groupId>
<artifactId>net-snmp</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<!-- TODO move over to release snmp-core when it becomes available. ONOS-3646 -->
......