--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring;
+
+import org.opendaylight.controller.config.util.capability.Capability;
+import org.opendaylight.controller.sal.common.util.NoopAutoCloseable;
+import org.opendaylight.netconf.api.monitoring.CapabilityListener;
+import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
+import org.opendaylight.netconf.mapping.api.NetconfOperation;
+import org.opendaylight.netconf.mapping.api.NetconfOperationService;
+import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory;
+import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener;
+import org.opendaylight.netconf.monitoring.GetSchema;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class MdSalMonitoringMapperFactory implements NetconfOperationServiceFactory, AutoCloseable {
+
+ private final NetconfOperationService operationService;
+ private final MonitoringToMdsalWriter monitoringToMdsalWriter;
+ private final NetconfOperationServiceFactoryListener netconfOperationServiceFactoryListener;
+
+ private static final Set<Capability> CAPABILITIES = Collections.emptySet();
+
+ public MdSalMonitoringMapperFactory(final NetconfOperationServiceFactoryListener netconfOperationServiceFactoryListener,
+ final NetconfMonitoringService netconfMonitoringService,
+ final MonitoringToMdsalWriter monitoringToMdsalWriter) {
+
+ this.netconfOperationServiceFactoryListener = netconfOperationServiceFactoryListener;
+ this.monitoringToMdsalWriter = monitoringToMdsalWriter;
+
+ this.operationService = new NetconfOperationService() {
+ @Override
+ public Set<NetconfOperation> getNetconfOperations() {
+ return Collections.singleton(new GetSchema(netconfMonitoringService));
+ }
+
+ @Override
+ public void close() {
+ // NOOP
+ }
+ };
+
+ this.netconfOperationServiceFactoryListener.onAddNetconfOperationServiceFactory(this);
+ }
+
+ @Override
+ public NetconfOperationService createService(final String netconfSessionIdForReporting) {
+ return operationService;
+ }
+
+ @Override
+ public Set<Capability> getCapabilities() {
+ // TODO
+ // No capabilities exposed to prevent clashes with schemas from mdsal-netconf-connector (it exposes all the schemas)
+ // If the schemas exposed by mdsal-netconf-connector are filtered, this class would expose monitoring related models
+ return CAPABILITIES;
+ }
+
+ @Override
+ public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
+ return NoopAutoCloseable.INSTANCE;
+ }
+
+ /**
+ * Invoke using blueprint
+ */
+ @Override
+ public void close() {
+ monitoringToMdsalWriter.close();
+ netconfOperationServiceFactoryListener.onRemoveNetconfOperationServiceFactory(this);
+ }
+
+}
\ No newline at end of file
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
/**
* Writes netconf server state changes received from NetconfMonitoringService to netconf-state datastore subtree.
*/
-final class MonitoringToMdsalWriter implements AutoCloseable, NetconfMonitoringService.CapabilitiesListener,
- NetconfMonitoringService.SessionsListener, BindingAwareProvider {
+public final class MonitoringToMdsalWriter implements AutoCloseable, NetconfMonitoringService.CapabilitiesListener,
+ NetconfMonitoringService.SessionsListener {
private static final Logger LOG = LoggerFactory.getLogger(MonitoringToMdsalWriter.class);
InstanceIdentifier.create(NetconfState.class).child(Sessions.class);
private final NetconfMonitoringService serverMonitoringDependency;
- private DataBroker dataBroker;
+ private final DataBroker dataBroker;
- public MonitoringToMdsalWriter(final NetconfMonitoringService serverMonitoringDependency) {
+ public MonitoringToMdsalWriter(final NetconfMonitoringService serverMonitoringDependency,
+ final DataBroker dataBroker) {
this.serverMonitoringDependency = serverMonitoringDependency;
+ this.dataBroker = dataBroker;
}
+ /**
+ * Invoke using blueprint
+ */
@Override
public void close() {
runTransaction((tx) -> tx.delete(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(NetconfState.class)));
runTransaction((tx) -> tx.put(LogicalDatastoreType.OPERATIONAL, SCHEMAS_INSTANCE_IDENTIFIER, schemas));
}
- @Override
- public void onSessionInitiated(final BindingAwareBroker.ProviderContext providerContext) {
- dataBroker = providerContext.getSALService(DataBroker.class);
+ /**
+ * Invoke using blueprint
+ */
+ public void start() {
serverMonitoringDependency.registerCapabilitiesListener(this);
serverMonitoringDependency.registerSessionsListener(this);
}
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring;
-
-import java.util.Collections;
-import java.util.Set;
-import org.opendaylight.controller.config.util.capability.Capability;
-import org.opendaylight.netconf.api.monitoring.CapabilityListener;
-import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
-import org.opendaylight.netconf.mapping.api.NetconfOperation;
-import org.opendaylight.netconf.mapping.api.NetconfOperationService;
-import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory;
-import org.opendaylight.netconf.monitoring.GetSchema;
-
-public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.AbstractNetconfMdsalMonitoringMapperModule {
- public NetconfMdsalMonitoringMapperModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public NetconfMdsalMonitoringMapperModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.NetconfMdsalMonitoringMapperModule oldModule, final java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void customValidation() {
- // add custom validation form module attributes here.
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- final NetconfMonitoringService serverMonitoringDependency = getServerMonitoringDependency();
-
- final MonitoringToMdsalWriter monitoringToMdsalWriter = new MonitoringToMdsalWriter(serverMonitoringDependency);
- getBindingAwareBrokerDependency().registerProvider(monitoringToMdsalWriter);
-
- final MdSalMonitoringMapperFactory mdSalMonitoringMapperFactory = new MdSalMonitoringMapperFactory(new MdsalMonitoringMapper(serverMonitoringDependency),
- this, monitoringToMdsalWriter);
-
- getAggregatorDependency().onAddNetconfOperationServiceFactory(mdSalMonitoringMapperFactory);
- return mdSalMonitoringMapperFactory;
-
- }
-
- private static class MdSalMonitoringMapperFactory implements NetconfOperationServiceFactory, AutoCloseable {
-
- private final NetconfOperationService operationService;
- private final NetconfMdsalMonitoringMapperModule module;
- private final MonitoringToMdsalWriter monitoringToMdsalWriter;
-
- private static final Set<Capability> CAPABILITIES = Collections.emptySet();
- private static final AutoCloseable AUTO_CLOSEABLE = new AutoCloseable() {
- @Override
- public void close() throws Exception {
- // NOOP
- }
- };
-
- public MdSalMonitoringMapperFactory(
- final NetconfOperationService operationService,
- final NetconfMdsalMonitoringMapperModule module,
- final MonitoringToMdsalWriter monitoringToMdsalWriter
- ) {
- this.operationService = operationService;
- this.module = module;
- this.monitoringToMdsalWriter = monitoringToMdsalWriter;
- }
-
- @Override
- public NetconfOperationService createService(final String netconfSessionIdForReporting) {
- return operationService;
- }
-
- @Override
- public Set<Capability> getCapabilities() {
- // TODO
- // No capabilities exposed to prevent clashes with schemas from mdsal-netconf-connector (it exposes all the schemas)
- // If the schemas exposed by mdsal-netconf-connector are filtered, this class would expose monitoring related models
- return CAPABILITIES;
- }
-
- @Override
- public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
- return AUTO_CLOSEABLE;
- }
-
- @Override
- public void close() {
- monitoringToMdsalWriter.close();
- module.getAggregatorDependency().onRemoveNetconfOperationServiceFactory(this);
- }
-
- }
-
-
- private static class MdsalMonitoringMapper implements NetconfOperationService {
-
- private final NetconfMonitoringService serverMonitoringDependency;
-
- public MdsalMonitoringMapper(final NetconfMonitoringService serverMonitoringDependency) {
- this.serverMonitoringDependency = serverMonitoringDependency;
- }
-
- @Override
- public Set<NetconfOperation> getNetconfOperations() {
- return Collections.<NetconfOperation>singleton(new GetSchema(serverMonitoringDependency));
- }
-
- @Override
- public void close() {
- // NOOP
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-/*
-* Generated file
-*
-* Generated from: yang module name: netconf-mdsal-monitoring yang module local name: netconf-mdsal-monitoring-mapper
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Wed Feb 18 10:22:17 CET 2015
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring;
-public class NetconfMdsalMonitoringMapperModuleFactory extends org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.AbstractNetconfMdsalMonitoringMapperModuleFactory {
-
-}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2016 Inocybe Technologies Inc. and others. All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+ xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+ odl:use-default-for-reference-types="true">
+
+ <reference id="dataBroker"
+ interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+ odl:type="default"/>
+ <reference id="netconfMonitoringService"
+ interface="org.opendaylight.netconf.api.monitoring.NetconfMonitoringService"
+ odl:type="netconf-server-monitoring"/>
+ <reference id="netconfOperationServiceFactoryListener"
+ interface="org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener"
+ odl:type="mapper-aggregator-registry"/>
+
+ <bean id="monitoringToMdsalWriter"
+ class="org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MonitoringToMdsalWriter"
+ init-method="start"
+ destroy-method="close">
+ <argument ref="netconfMonitoringService"/>
+ <argument ref="dataBroker"/>
+ </bean>
+
+ <bean id="mdsalMonitoringMapperFactory"
+ class="org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MdSalMonitoringMapperFactory"
+ destroy-method="close">
+ <argument ref="netconfOperationServiceFactoryListener"/>
+ <argument ref="netconfMonitoringService"/>
+ <argument ref="monitoringToMdsalWriter"/>
+ </bean>
+
+</blueprint>
+++ /dev/null
-module netconf-mdsal-monitoring {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:monitoring";
- prefix "nmmonitor";
-
- import netconf-northbound-mapper { prefix nnm; revision-date 2015-01-14; }
- import opendaylight-md-sal-binding {prefix md-sal-binding; revision-date 2013-10-28;}
- import netconf-northbound { prefix nn; revision-date 2015-01-14; }
- import config { prefix config; revision-date 2013-04-05; }
-
- organization "Cisco Systems, Inc.";
-
- description
- "This module contains the base YANG definitions for
- an MD-SAL monitoring mapper implementation";
-
- revision "2015-02-18" {
- description
- "Initial revision.";
- }
-
- identity netconf-mdsal-monitoring-mapper {
- base config:module-type;
- config:provided-service nnm:netconf-northbound-mapper;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case netconf-mdsal-monitoring-mapper {
- when "/config:modules/config:module/config:type = 'netconf-mdsal-monitoring-mapper'";
-
- container server-monitoring {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity nn:netconf-server-monitoring;
- }
- }
- }
-
- container aggregator {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity nnm:netconf-mapper-registry;
- }
- }
- }
-
- container binding-aware-broker {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity md-sal-binding:binding-broker-osgi-registry;
- }
- }
- }
- }
- }
-
-}
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
@Mock
private NetconfMonitoringService monitoring;
@Mock
- private BindingAwareBroker.ProviderContext context;
- @Mock
private DataBroker dataBroker;
@Mock
private WriteTransaction writeTransaction;
doReturn(null).when(monitoring).registerCapabilitiesListener(any());
doReturn(null).when(monitoring).registerSessionsListener(any());
- doReturn(dataBroker).when(context).getSALService(DataBroker.class);
-
doReturn(writeTransaction).when(dataBroker).newWriteOnlyTransaction();
doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
doNothing().when(writeTransaction).delete(eq(LogicalDatastoreType.OPERATIONAL), any());
doReturn(Futures.immediateCheckedFuture(null)).when(writeTransaction).submit();
- writer = new MonitoringToMdsalWriter(monitoring);
+ writer = new MonitoringToMdsalWriter(monitoring, dataBroker);
}
@Test
public void testClose() throws Exception {
- writer.onSessionInitiated(context);
+ writer.start();
writer.close();
InOrder inOrder = inOrder(writeTransaction);
inOrder.verify(writeTransaction).delete(LogicalDatastoreType.OPERATIONAL, INSTANCE_IDENTIFIER);
@Test
public void testOnCapabilityChanged() throws Exception {
final InstanceIdentifier<Capabilities> capabilitiesId = InstanceIdentifier.create(NetconfState.class).child(Capabilities.class);
- writer.onSessionInitiated(context);
+ writer.start();
final Capabilities capabilities = new CapabilitiesBuilder().build();
writer.onCapabilitiesChanged(capabilities);
InOrder inOrder = inOrder(writeTransaction);
@Test
public void testOnSchemasChanged() throws Exception {
final InstanceIdentifier<Schemas> schemasId = InstanceIdentifier.create(NetconfState.class).child(Schemas.class);
- writer.onSessionInitiated(context);
+ writer.start();
final Schemas schemas = new SchemasBuilder().build();
writer.onSchemasChanged(schemas);
InOrder inOrder = inOrder(writeTransaction);
.setSessionId(1L)
.build();
final InstanceIdentifier<Session> id = InstanceIdentifier.create(NetconfState.class).child(Sessions.class).child(Session.class, session.getKey());
- writer.onSessionInitiated(context);
+ writer.start();
writer.onSessionStarted(session);
InOrder inOrder = inOrder(writeTransaction);
inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, id, session);
.setSessionId(1L)
.build();
final InstanceIdentifier<Session> id = InstanceIdentifier.create(NetconfState.class).child(Sessions.class).child(Session.class, session.getKey());
- writer.onSessionInitiated(context);
+ writer.start();
writer.onSessionEnded(session);
InOrder inOrder = inOrder(writeTransaction);
inOrder.verify(writeTransaction).delete(LogicalDatastoreType.OPERATIONAL, id);
sessions.add(session2);
final InstanceIdentifier<Session> id1 = InstanceIdentifier.create(NetconfState.class).child(Sessions.class).child(Session.class, session1.getKey());
final InstanceIdentifier<Session> id2 = InstanceIdentifier.create(NetconfState.class).child(Sessions.class).child(Session.class, session2.getKey());
- writer.onSessionInitiated(context);
+ writer.start();
writer.onSessionsUpdated(sessions);
InOrder inOrder = inOrder(writeTransaction);
inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, id1, session1);
@Test
public void testOnSessionInitiated() throws Exception {
- writer.onSessionInitiated(context);
+ writer.start();
verify(monitoring).registerCapabilitiesListener(writer);
}
}
\ No newline at end of file
import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;
+import io.netty.util.internal.ConcurrentSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
private static final Logger LOG = LoggerFactory.getLogger(AggregatedNetconfOperationServiceFactory.class);
- private final Set<NetconfOperationServiceFactory> factories = new HashSet<>();
- private final Multimap<NetconfOperationServiceFactory, AutoCloseable> registrations = HashMultimap.create();
- private final Set<CapabilityListener> listeners = Sets.newHashSet();
+ private final Set<NetconfOperationServiceFactory> factories = new ConcurrentSet<>();
+ private final Multimap<NetconfOperationServiceFactory, AutoCloseable> registrations = Multimaps.synchronizedMultimap(HashMultimap.create());
+ private final Set<CapabilityListener> listeners = new ConcurrentSet<>();
public AggregatedNetconfOperationServiceFactory() {
}
}
@Override
- public synchronized Set<Capability> getCapabilities() {
+ public Set<Capability> getCapabilities() {
final HashSet<Capability> capabilities = Sets.newHashSet();
for (final NetconfOperationServiceFactory factory : factories) {
capabilities.addAll(factory.getCapabilities());
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import io.netty.util.internal.ConcurrentSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.opendaylight.controller.config.util.capability.BasicCapability;
import org.opendaylight.controller.config.util.capability.Capability;
import org.opendaylight.netconf.api.monitoring.CapabilityListener;
}
};
- private final Set<NetconfManagementSession> sessions = new HashSet<>();
+ private final Set<NetconfManagementSession> sessions = new ConcurrentSet<>();
private final NetconfOperationServiceFactory netconfOperationProvider;
- private final Map<Uri, Capability> capabilities = new HashMap<>();
- private final Map<String, Map<String, String>> mappedModulesToRevisionToSchema = Maps.newHashMap();
+ private final Map<Uri, Capability> capabilities = new ConcurrentHashMap<>();
+ private final Map<String, Map<String, String>> mappedModulesToRevisionToSchema = new ConcurrentHashMap<>();
- private final Set<NetconfMonitoringService.CapabilitiesListener> listeners = Sets.newHashSet();
+ private final Set<NetconfMonitoringService.CapabilitiesListener> listeners = new ConcurrentSet<>();
private volatile BaseNotificationPublisherRegistration notificationPublisher;
NetconfCapabilityMonitoringService(final NetconfOperationServiceFactory netconfOperationProvider) {
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:mapper">prefix:netconf-mdsal-mapper</type>
- <name>netconf-mdsal-mapper</name>
- </module>
-
<module>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl">prefix:netconf-server-dispatcher-impl</type>
<name>netconf-mdsal-server-dispatcher</name>
</module>
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:monitoring">prefix:netconf-mdsal-monitoring-mapper</type>
- <name>netconf-mdsal-monitoring-mapper</name>
- <server-monitoring xmlns="urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:monitoring">
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound">prefix:netconf-server-monitoring</type>
- <name>server-monitor</name>
- </server-monitoring>
- <binding-aware-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:monitoring">
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type>
- <name>binding-osgi-broker</name>
- </binding-aware-broker>
- <aggregator xmlns="urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:monitoring">
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper">prefix:netconf-mapper-registry</type>
- <name>mapper-aggregator-registry</name>
- </aggregator>
- </module>
-
<module>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl">prefix:netconf-mapper-aggregator</type>
<name>mapper-aggregator</name>
<provider>/modules/module[type='netconf-server-monitoring-impl'][name='server-monitor']</provider>
</instance>
</service>
- <service>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper">prefix:netconf-northbound-mapper</type>
- <instance>
- <name>netconf-mdsal-mapper</name>
- <provider>/modules/module[type='netconf-mdsal-mapper'][name='netconf-mdsal-mapper']</provider>
- </instance>
- </service>
<service>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper">prefix:netconf-mapper-registry</type>
<instance>
</configuration>
<required-capabilities>
<capability>urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification?module=netconf-northbound-notification&revision=2015-08-06</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:mapper?module=netconf-mdsal-mapper&revision=2015-01-14</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:controller:netconf:mdsal:monitoring?module=netconf-mdsal-monitoring&revision=2015-02-18</capability>
<capability>urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:tcp?module=netconf-northbound-tcp&revision=2015-04-23</capability>
<capability>urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl?module=netconf-northbound-impl&revision=2015-01-12</capability>
<capability>urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:scheduled?module=threadpool-impl-scheduled&revision=2013-12-01</capability>