blob: b15277c914c396b89c84b6d36bf6bee8d4805728 [file] [log] [blame]
/*
* Copyright 2016-present Open Networking Foundation
*
* 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 org.onosproject.net.DeviceId;
import org.onosproject.snmp.SnmpDevice;
import org.slf4j.Logger;
import java.net.URI;
import java.net.URISyntaxException;
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 DefaultSnmpDevice implements SnmpDevice {
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;
public DefaultSnmpDevice(String snmpHost, int snmpPort, String username, String community) {
this.snmpHost = checkNotNull(snmpHost, "SNMP Device IP cannot be null");
this.snmpPort = snmpPort;
this.username = username;
this.community = community;
this.deviceId = createDeviceId();
reachable = true;
}
@Override
public String deviceInfo() {
return new StringBuilder("host: ").append(snmpHost).append(". port: ")
.append(snmpPort).toString();
}
@Override
public void disconnect() {
log.info("disconnect");
reachable = false;
}
@Override
public boolean isReachable() {
return reachable;
}
@Override
public String getSnmpHost() {
return snmpHost;
}
@Override
public int getSnmpPort() {
return snmpPort;
}
@Override
public String getUsername() {
return username;
}
@Override
public String getCommunity() {
return community;
}
@Override
public DeviceId deviceId() {
return deviceId;
}
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);
}
}
}