1 package org.opendaylight.controller.sal.connect.netconf
3 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession
4 import org.opendaylight.controller.sal.core.api.mount.MountProvisionService
5 import org.opendaylight.controller.md.sal.common.api.data.DataProvisionService
6 import org.opendaylight.controller.sal.core.api.data.DataProviderService
7 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
8 import org.opendaylight.yangtools.yang.common.QName
9 import static org.opendaylight.controller.sal.connect.netconf.InventoryUtils.*;
10 import static extension org.opendaylight.controller.sal.connect.netconf.NetconfInventoryUtils.*;
12 import org.opendaylight.controller.sal.core.api.data.DataChangeListener
13 import org.opendaylight.yangtools.yang.data.api.CompositeNode
14 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent
16 import java.util.concurrent.ConcurrentHashMap
17 import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance
18 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher
19 import java.io.OptionalDataException
20 import com.google.common.base.Optional
21 import java.net.SocketAddress
22 import java.net.InetSocketAddress
24 class NetconfDeviceManager {
26 val Map<InstanceIdentifier, NetconfDevice> devices = new ConcurrentHashMap;
28 var ProviderSession session;
31 var DataProviderService dataService;
34 var MountProvisionService mountService;
36 val nodeUpdateListener = new NetconfInventoryListener(this);
40 var NetconfClientDispatcher dispatcher;
43 dataService?.registerDataChangeListener(INVENTORY_PATH, nodeUpdateListener);
44 if(dispatcher == null) {
45 dispatcher = new NetconfClientDispatcher(Optional.absent);
49 def netconfNodeAdded(InstanceIdentifier path, CompositeNode node) {
50 val address = node.endpointAddress;
51 val port = Integer.parseInt(node.endpointPort);
52 netconfNodeAdded(path,new InetSocketAddress(address,port))
56 def netconfNodeAdded(InstanceIdentifier path, InetSocketAddress address) {
58 val mountPointPath = path;
59 val mountPoint = mountService.createOrGetMountPoint(mountPointPath);
60 val localPath = InstanceIdentifier.builder().toInstance;
61 val netconfDevice = new NetconfDevice(mountPoint,localPath);
62 netconfDevice.setSocketAddress(address);
63 netconfDevice.start(dispatcher);
66 def netconfNodeRemoved(InstanceIdentifier path) {
72 class NetconfInventoryListener implements DataChangeListener {
74 val NetconfDeviceManager manager;
76 new(NetconfDeviceManager manager) {
77 this.manager = manager;
80 override onDataChanged(DataChangeEvent<InstanceIdentifier, CompositeNode> change) {
82 //manager.netconfNodeAdded(path, change);