From e63291850fd0795c5700e25e67e5dee89ba54c5f Mon Sep 17 00:00:00 2001 From: Ashlee Young Date: Tue, 1 Dec 2015 05:49:27 -0800 Subject: onos commit hash c2999f30c69e50df905a9d175ef80b3f23a98514 Change-Id: I2bb8562c4942b6d6a6d60b663db2e17540477b81 Signed-off-by: Ashlee Young --- .../netconf/ctl/NetconfControllerImpl.java | 143 +++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 framework/src/onos/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java (limited to 'framework/src/onos/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java') diff --git a/framework/src/onos/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java b/framework/src/onos/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java new file mode 100644 index 00000000..a572a2bc --- /dev/null +++ b/framework/src/onos/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java @@ -0,0 +1,143 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.netconf.ctl; + +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Service; +import org.onlab.packet.IpAddress; +import org.onosproject.net.DeviceId; +import org.onosproject.netconf.NetconfController; +import org.onosproject.netconf.NetconfDevice; +import org.onosproject.netconf.NetconfDeviceInfo; +import org.onosproject.netconf.NetconfDeviceListener; +import org.osgi.service.component.ComponentContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; + +/** + * The implementation of NetconfController. + */ +@Component(immediate = true) +@Service +public class NetconfControllerImpl implements NetconfController { + + public static final Logger log = LoggerFactory + .getLogger(NetconfControllerImpl.class); + + public Map netconfDeviceMap = new ConcurrentHashMap<>(); + + protected Set netconfDeviceListeners = new CopyOnWriteArraySet<>(); + + @Activate + public void activate(ComponentContext context) { + log.info("Started"); + } + + @Deactivate + public void deactivate() { + netconfDeviceMap.clear(); + log.info("Stopped"); + } + + @Override + public void addDeviceListener(NetconfDeviceListener listener) { + if (!netconfDeviceListeners.contains(listener)) { + netconfDeviceListeners.add(listener); + } + } + + @Override + public void removeDeviceListener(NetconfDeviceListener listener) { + netconfDeviceListeners.remove(listener); + } + + @Override + public NetconfDevice getNetconfDevice(DeviceId deviceInfo) { + return netconfDeviceMap.get(deviceInfo); + } + + @Override + public NetconfDevice getNetconfDevice(IpAddress ip, int port) { + NetconfDevice device = null; + for (DeviceId info : netconfDeviceMap.keySet()) { + if (IpAddress.valueOf(info.uri().getHost()).equals(ip) && + info.uri().getPort() == port) { + return netconfDeviceMap.get(info); + } + } + return device; + } + + @Override + public NetconfDevice connectDevice(NetconfDeviceInfo deviceInfo) { + if (netconfDeviceMap.containsKey(deviceInfo.getDeviceId())) { + log.warn("Device {} is already present"); + return netconfDeviceMap.get(deviceInfo.getDeviceId()); + } else { + log.info("Creating NETCONF device {}", deviceInfo); + return createDevice(deviceInfo); + } + } + + @Override + public void removeDevice(NetconfDeviceInfo deviceInfo) { + if (netconfDeviceMap.containsKey(deviceInfo.getDeviceId())) { + log.warn("Device {} is not present"); + } else { + stopDevice(deviceInfo); + } + } + + private NetconfDevice createDevice(NetconfDeviceInfo deviceInfo) { + NetconfDevice netconfDevice = null; + try { + netconfDevice = new NetconfDeviceImpl(deviceInfo); + for (NetconfDeviceListener l : netconfDeviceListeners) { + l.deviceAdded(deviceInfo); + } + netconfDeviceMap.put(deviceInfo.getDeviceId(), netconfDevice); + } catch (IOException e) { + throw new IllegalStateException("Cannot create NETCONF device " + + "with device Info: " + + deviceInfo + " \n" + e); + } + return netconfDevice; + } + + private void stopDevice(NetconfDeviceInfo deviceInfo) { + netconfDeviceMap.get(deviceInfo.getDeviceId()).disconnect(); + netconfDeviceMap.remove(deviceInfo.getDeviceId()); + for (NetconfDeviceListener l : netconfDeviceListeners) { + l.deviceRemoved(deviceInfo); + } + } + + @Override + public Map getDevicesMap() { + return netconfDeviceMap; + } + + +} -- cgit 1.2.3-korg