<instructions>
<Export-Package>
org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.*,
- org.opendaylight.controller.config.yang.config.endpoint_provider,
+ org.opendaylight.controller.config.yang.config.groupbasedpolicy.*,
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.*,
org.opendaylight.groupbasedpolicy.api.*,
org.opendaylight.groupbasedpolicy.dto,
- org.opendaylight.groupbasedpolicy.endpoint,
org.opendaylight.groupbasedpolicy.util,
</Export-Package>
</instructions>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
<module>
- <type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy:impl">
+ <type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
groupbasedpolicy:groupbasedpolicy-impl
</type>
<name>groupbasedpolicy-impl</name>
</rpc-registry>
</module>
+ <module>
+ <type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
+ groupbasedpolicy:policy-validator-registry-impl
+ </type>
+ <name>policy-validator-registry</name>
+
+ <data-broker>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+ <name>binding-data-broker</name>
+ </data-broker>
+
+ </module>
+ <module>
+ <type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
+ groupbasedpolicy:ep-renderer-augmentation-registry-impl
+ </type>
+ <name>ep-renderer-augmentation-registry</name>
+
+ <data-broker>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+ <name>binding-data-broker</name>
+ </data-broker>
+
+ <rpc-registry>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+ <name>binding-rpc-broker</name>
+ </rpc-registry>
+
+ </module>
</modules>
+
+ <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+ <service>
+ <type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
+ groupbasedpolicy:policy-validator-registry
+ </type>
+
+ <instance>
+ <name>policy-validator-registry</name>
+ <provider>/modules/module[type='policy-validator-registry-impl'][name='policy-validator-registry']</provider>
+ </instance>
+ </service>
+ <service>
+ <type xmlns:epr="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
+ epr:ep-renderer-augmentation-registry
+ </type>
+
+ <instance>
+ <name>ep-renderer-augmentation-registry</name>
+ <provider>/modules/module[type='ep-renderer-augmentation-registry-impl'][name='ep-renderer-augmentation-registry']</provider>
+ </instance>
+ </service>
+ </services>
</data>
</configuration>
<required-capabilities>
- <capability>urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy:impl?module=groupbasedpolicy-impl&revision=2015-11-06</capability>
+ <capability>urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy?module=groupbasedpolicy-cfg&revision=2015-11-06</capability>
</required-capabilities>
</snapshot>
--- /dev/null
+package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
+
+import com.google.common.base.Preconditions;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
+
+public class EpRendererAugmentationRegistryImplModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractEpRendererAugmentationRegistryImplModule {
+ public EpRendererAugmentationRegistryImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public EpRendererAugmentationRegistryImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.groupbasedpolicy.EpRendererAugmentationRegistryImplModule oldModule, 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 DataBroker dataProvider = Preconditions.checkNotNull(getDataBrokerDependency());
+ final RpcProviderRegistry rpcRegistry = Preconditions.checkNotNull(getRpcRegistryDependency());
+
+ return new EndpointRpcRegistry(dataProvider, rpcRegistry);
+ }
+
+}
--- /dev/null
+/*
+* Generated file
+*
+* Generated from: yang module name: groupbasedpolicy-cfg yang module local name: ep-renderer-augmentation-registry-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Thu Dec 10 17:52:04 CET 2015
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
+public class EpRendererAugmentationRegistryImplModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractEpRendererAugmentationRegistryImplModuleFactory {
+
+}
-/*
- * 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.config.groupbasedpolicy.impl;
+package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
+import com.google.common.base.Preconditions;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
-import org.opendaylight.groupbasedpolicy.resolver.FollowedTenantListener;
-import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver;
import org.opendaylight.groupbasedpolicy.sf.SubjectFeatureDefinitionProvider;
import org.opendaylight.groupbasedpolicy.sf.SupportedActionDefinitionListener;
import org.opendaylight.groupbasedpolicy.sf.SupportedClassifierDefinitionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Preconditions;
-
-
-
-public class GroupbasedpolicyModule extends
- org.opendaylight.controller.config.yang.config.groupbasedpolicy.impl.AbstractGroupbasedpolicyModule {
+public class GroupbasedpolicyModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractGroupbasedpolicyModule {
private static final Logger LOG = LoggerFactory.getLogger(GroupbasedpolicyModule.class);
- public GroupbasedpolicyModule(
- org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ public GroupbasedpolicyModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
super(identifier, dependencyResolver);
}
- public GroupbasedpolicyModule(
- org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- org.opendaylight.controller.config.yang.config.groupbasedpolicy.impl.GroupbasedpolicyModule oldModule,
- java.lang.AutoCloseable oldInstance) {
+ public GroupbasedpolicyModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.groupbasedpolicy.GroupbasedpolicyModule oldModule, java.lang.AutoCloseable oldInstance) {
super(identifier, dependencyResolver, oldModule, oldInstance);
}
@Override
public java.lang.AutoCloseable createInstance() {
final DataBroker dataProvider = Preconditions.checkNotNull(getDataBrokerDependency());
- final RpcProviderRegistry rpcRegistry = Preconditions.checkNotNull(getRpcRegistryDependency());
-
try {
return new AutoCloseable() {
SubjectFeatureDefinitionProvider sfdp = new SubjectFeatureDefinitionProvider(dataProvider);
- EndpointRpcRegistry epRpcRegistry = new EndpointRpcRegistry(dataProvider, rpcRegistry);
SupportedClassifierDefinitionListener supportedClassifierDefinitionListener =
new SupportedClassifierDefinitionListener(dataProvider);
SupportedActionDefinitionListener supportedActionDefinitionListener =
new SupportedActionDefinitionListener(dataProvider);
- PolicyResolver policyResolver = new PolicyResolver(dataProvider);
- FollowedTenantListener followedTenantListener = new FollowedTenantListener(dataProvider, policyResolver);
-
@Override
public void close() throws Exception {
sfdp.close();
- epRpcRegistry.close();
supportedClassifierDefinitionListener.close();
supportedActionDefinitionListener.close();
- policyResolver.close();
- followedTenantListener.close();
}
};
} catch (TransactionCommitFailedException e) {
throw new RuntimeException(e);
}
}
+
}
/*
* Generated file
*
-* Generated from: yang module name: groupbasedpolicy-impl yang module local name: groupbasedpolicy-impl
+* Generated from: yang module name: groupbasedpolicy-cfg yang module local name: groupbasedpolicy-impl
* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Fri Nov 06 13:54:27 CET 2015
+* Generated at: Thu Dec 10 17:52:04 CET 2015
*
* Do not modify this file unless it is present under src/main directory
*/
-package org.opendaylight.controller.config.yang.config.groupbasedpolicy.impl;
-public class GroupbasedpolicyModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.impl.AbstractGroupbasedpolicyModuleFactory {
+package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
+public class GroupbasedpolicyModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractGroupbasedpolicyModuleFactory {
}
--- /dev/null
+package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
+
+import com.google.common.base.Preconditions;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver;
+
+public class PolicyValidatorRegistryModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractPolicyValidatorRegistryModule {
+ public PolicyValidatorRegistryModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public PolicyValidatorRegistryModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.groupbasedpolicy.PolicyValidatorRegistryModule oldModule, 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 DataBroker dataProvider = Preconditions.checkNotNull(getDataBrokerDependency());
+
+ return new PolicyResolver(dataProvider);
+ }
+
+}
--- /dev/null
+/*
+* Generated file
+*
+* Generated from: yang module name: groupbasedpolicy-cfg yang module local name: policy-validator-registry-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Thu Dec 10 17:52:04 CET 2015
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
+public class PolicyValidatorRegistryModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractPolicyValidatorRegistryModuleFactory {
+
+}
package org.opendaylight.groupbasedpolicy.api;
-public interface EpRendererAugmentationRegistrar {
+public interface EpRendererAugmentationRegistry {
/**
* Registers renderer's endpoint augmentation.
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
-public interface PolicyValidatorRegistrar {
+public interface PolicyValidatorRegistry {
/**
* Registers validator of {@link ActionInstance} for {@link ActionDefinitionId}.
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.Endpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointsBuilder;
* Endpoint registry provides a scalable store for accessing and updating
* information about endpoints.
*/
-public class EndpointRpcRegistry implements EndpointService, AutoCloseable {
+public class EndpointRpcRegistry implements EndpointService, EpRendererAugmentationRegistry, AutoCloseable {
private static final Logger LOG =
LoggerFactory.getLogger(EndpointRpcRegistry.class);
* - specific implementation RPC augmentation, if any. Otherwise
* NULL
*/
- public static void register(EpRendererAugmentation epRendererAugmentation) {
+ @Override
+ public void register(EpRendererAugmentation epRendererAugmentation) {
if (epRendererAugmentation != null) {
registeredRenderers.putIfAbsent(epRendererAugmentation.getClass().getName(), epRendererAugmentation);
LOG.info("Registered {}", epRendererAugmentation.getClass().getName());
/**
*
* @param regImp the endpoint augmentation
- * @throws Exception
*/
- public static void unregister(EpRendererAugmentation regImp) throws Exception {
+ @Override
+ public void unregister(EpRendererAugmentation regImp) {
if (regImp == null || !registeredRenderers.containsKey(regImp.getClass().getName())) {
return;
}
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistrar;
+import org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistry;
import org.opendaylight.groupbasedpolicy.api.ValidationResult;
import org.opendaylight.groupbasedpolicy.api.Validator;
import org.opendaylight.groupbasedpolicy.dto.EgKey;
* been registered.
*
*/
-public class PolicyResolver implements PolicyValidatorRegistrar, AutoCloseable {
+public class PolicyResolver implements PolicyValidatorRegistry, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(PolicyResolver.class);
private final DataBroker dataProvider;
- protected ConcurrentMap<TenantId, TenantContext> resolvedTenants;
+ private final FollowedTenantListener followedTenantListener;
+
+
+ protected final ConcurrentMap<TenantId, TenantContext> resolvedTenants;
/*
* Store validators for ActionDefinitions from Renderers
*
*/
- protected SetMultimap<ActionDefinitionId, Validator<ActionInstance>> actionInstanceValidatorsByDefinition = Multimaps.synchronizedSetMultimap(HashMultimap.<ActionDefinitionId, Validator<ActionInstance>>create());
- protected SetMultimap<ClassifierDefinitionId, Validator<ClassifierInstance>> classifierInstanceValidatorsByDefinition = Multimaps.synchronizedSetMultimap(HashMultimap.<ClassifierDefinitionId, Validator<ClassifierInstance>>create());
+ private SetMultimap<ActionDefinitionId, Validator<ActionInstance>> actionInstanceValidatorsByDefinition = Multimaps.synchronizedSetMultimap(HashMultimap.<ActionDefinitionId, Validator<ActionInstance>>create());
+ private SetMultimap<ClassifierDefinitionId, Validator<ClassifierInstance>> classifierInstanceValidatorsByDefinition = Multimaps.synchronizedSetMultimap(HashMultimap.<ClassifierDefinitionId, Validator<ClassifierInstance>>create());
public PolicyResolver(DataBroker dataProvider) {
this.dataProvider = dataProvider;
+ followedTenantListener = new FollowedTenantListener(dataProvider, this);
resolvedTenants = new ConcurrentHashMap<>();
LOG.debug("Initialized renderer common policy resolver");
}
ctx.registration.close();
}
}
+ if (followedTenantListener != null) {
+ followedTenantListener.close();
+ }
}
// *************************
});
}
- protected void updatePolicy() {
+ private void updatePolicy() {
try {
Set<IndexedTenant> indexedTenants = getIndexedTenants(resolvedTenants.values());
Table<EgKey, EgKey, Policy> policyMap = PolicyResolverUtils.resolvePolicy(indexedTenants);
return true;
}
- protected static class TenantContext {
+ static class TenantContext {
- ListenerRegistration<DataChangeListener> registration;
+ final ListenerRegistration<DataChangeListener> registration;
AtomicReference<IndexedTenant> tenant = new AtomicReference<>();
--- /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
+ */
+
+module groupbasedpolicy-cfg {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy";
+ prefix "groupbasedpolicy-cfg";
+
+ import config { prefix config; revision-date 2013-04-05; }
+ import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+
+ description
+ "This module contains the base YANG definitions for
+ groupbasedpolicy impl implementation.";
+
+ revision "2015-11-06" {
+ description
+ "Initial revision.";
+ }
+
+ identity ep-renderer-augmentation-registry {
+ description
+ "ep-renderer-augmentation-registry service definition";
+
+ base "config:service-type";
+ config:java-class "org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry";
+ }
+
+ identity policy-validator-registry {
+ description
+ "policy-validator-registry service definition";
+
+ base "config:service-type";
+ config:java-class "org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistry";
+ }
+
+ identity policy-validator-registry-impl {
+ base "config:module-type";
+
+ config:provided-service policy-validator-registry;
+ config:java-name-prefix PolicyValidatorRegistry;
+ }
+
+ identity ep-renderer-augmentation-registry-impl {
+ base "config:module-type";
+
+ config:provided-service ep-renderer-augmentation-registry;
+ config:java-name-prefix EpRendererAugmentationRegistryImpl;
+ }
+
+ identity groupbasedpolicy-impl {
+ base "config:module-type";
+
+ config:java-name-prefix Groupbasedpolicy;
+ }
+
+ // Augments the 'configuration' choice node under modules/module.
+ augment "/config:modules/config:module/config:configuration" {
+ case groupbasedpolicy-impl {
+ when "/config:modules/config:module/config:type = 'groupbasedpolicy-impl'";
+
+ //wires in the data-broker service
+ container data-broker {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-async-data-broker;
+ }
+ }
+ }
+ //RPC Registry
+ container rpc-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-rpc-registry;
+ }
+ }
+ }
+ }
+ case policy-validator-registry-impl {
+ when "/config:modules/config:module/config:type = 'policy-validator-registry-impl'";
+
+ //wires in the data-broker service
+ container data-broker {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-async-data-broker;
+ }
+ }
+ }
+ }
+ case ep-renderer-augmentation-registry-impl {
+ when "/config:modules/config:module/config:type = 'ep-renderer-augmentation-registry-impl'";
+
+ //wires in the data-broker service
+ container data-broker {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-async-data-broker;
+ }
+ }
+ }
+ //RPC Registry
+ container rpc-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-rpc-registry;
+ }
+ }
+ }
+ }
+ }
+}
+++ /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
- */
-
-module groupbasedpolicy-impl {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy:impl";
- prefix "groupbasedpolicy-impl";
-
- import config { prefix config; revision-date 2013-04-05; }
- import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
-
- description
- "This module contains the base YANG definitions for
- groupbasedpolicy impl implementation.";
-
- revision "2015-11-06" {
- description
- "Initial revision.";
- }
-
- identity groupbasedpolicy-impl {
- base "config:module-type";
-
- config:java-name-prefix Groupbasedpolicy;
- }
-
- // Augments the 'configuration' choice node under modules/module.
- augment "/config:modules/config:module/config:configuration" {
- case groupbasedpolicy-impl {
- when "/config:modules/config:module/config:type = 'groupbasedpolicy-impl'";
-
- //wires in the data-broker service
- container data-broker {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity mdsal:binding-async-data-broker;
- }
- }
- }
- //RPC Registry
- container rpc-registry {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity mdsal:binding-rpc-registry;
- }
- }
- }
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 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
- */
-
-module endpoint-provider {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:config:endpoint-provider";
- prefix "endpoint-provider";
-
- import config { prefix config; revision-date 2013-04-05; }
-
- description
- "This module contains the base YANG definitions for
- endpoint-provider services.";
-
- revision "2014-04-21" {
- description
- "Initial revision.";
- }
-
- identity endpoint-provider {
- base "config:service-type";
- config:java-class "org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointData";
- }
- }
+++ /dev/null
-/*
- * Copyright (c) 2014 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
- */
-
-module policy-provider {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:controller:config:policy-provider";
- prefix "policy-provider";
-
- import config { prefix config; revision-date 2013-04-05; }
-
- description
- "This module contains the base YANG definitions for
- policy-provider services.";
-
- revision "2014-04-21" {
- description
- "Initial revision.";
- }
-
- identity policy-provider {
- base "config:service-type";
- config:java-class "org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.PolicyData";
- }
- }
public void registerTest() throws Exception {
verify(rpcRegistry).addRpcImplementation(any(Class.class), any(RpcService.class));
verify(t).put(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(Endpoints.class));
- EndpointRpcRegistry.register(epRendererAugmentation);
+ endpointRpcRegistry.register(epRendererAugmentation);
Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
- EndpointRpcRegistry.unregister(epRendererAugmentation);
+ endpointRpcRegistry.unregister(epRendererAugmentation);
Assert.assertEquals(0, EndpointRpcRegistry.registeredRenderers.size());
}
@Test
public void registerTestSafelyFail() {
- EndpointRpcRegistry.register(epRendererAugmentation);
- EndpointRpcRegistry.register(null);
+ endpointRpcRegistry.register(epRendererAugmentation);
+ endpointRpcRegistry.register(null);
Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
}
unresolved);
policyResolver = spy(new PolicyResolver(dataProvider));
- resolver = new PolicyResolver(null);
-
}
@Test
</type>
<name>iovisor-provider-impl</name>
- <rpc-registry>
- <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
- <name>binding-rpc-broker</name>
- </rpc-registry>
-
<data-broker>
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
<name>binding-data-broker</name>
</data-broker>
+ <ep-renderer-augmentation-registry>
+ <type xmlns:epr="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">epr:ep-renderer-augmentation-registry</type>
+ <name>ep-renderer-augmentation-registry</name>
+ </ep-renderer-augmentation-registry>
+
</module>
</modules>
</data>
@Override
public java.lang.AutoCloseable createInstance() {
- return new IovisorRenderer(getDataBrokerDependency(), getRpcRegistryDependency());
+ return new IovisorRenderer(getDataBrokerDependency(),
+ getEpRendererAugmentationRegistryDependency());
}
}
package org.opendaylight.groupbasedpolicy.renderer.iovisor;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry;
import org.opendaylight.groupbasedpolicy.renderer.iovisor.endpoint.EndpointManager;
import org.opendaylight.groupbasedpolicy.renderer.iovisor.module.IovisorModuleManager;
import org.slf4j.Logger;
private EndpointManager endPointManager;
private IovisorModuleManager iovisorModuleManager;
- public IovisorRenderer(DataBroker dataBroker, RpcProviderRegistry rpcProviderRegistry) {
+ public IovisorRenderer(DataBroker dataBroker,
+ EpRendererAugmentationRegistry epRendererAugmentationRegistry) {
LOG.info("IOVisor Renderer has Started");
- this.endPointManager = new EndpointManager(dataBroker, rpcProviderRegistry);
+ this.endPointManager = new EndpointManager(dataBroker, epRendererAugmentationRegistry);
this.iovisorModuleManager = new IovisorModuleManager(dataBroker);
}
import java.util.Map.Entry;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
-import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
private static final Logger LOG = LoggerFactory.getLogger(EndpointManager.class);
- private EndpointRpcRegistry endpointRpcRegistry;
private EndpointListener endpointListener;
+ private EpRendererAugmentationRegistry epRendererAugmentationRegistry;
- public EndpointManager(DataBroker dataBroker, RpcProviderRegistry rpcProviderRegistry) {
+ public EndpointManager(DataBroker dataBroker,
+ EpRendererAugmentationRegistry epRendererAugmentationRegistry) {
LOG.info("Initialized IOVisor EndpointManager");
Preconditions.checkNotNull(dataBroker, "DataBroker instance must not be null");
- Preconditions.checkNotNull(rpcProviderRegistry, "RpcProviderRegistry instance must not be null");
- this.endpointRpcRegistry = new EndpointRpcRegistry(dataBroker, rpcProviderRegistry);
+ this.epRendererAugmentationRegistry = epRendererAugmentationRegistry;
this.endpointListener = new EndpointListener(dataBroker);
- EndpointRpcRegistry.register(this);
+ epRendererAugmentationRegistry.register(this);
}
@Override
if (endpointListener != null) {
endpointListener.close();
}
- if (endpointRpcRegistry != null) {
- endpointRpcRegistry.close();
- }
- EndpointRpcRegistry.unregister(this);
+ epRendererAugmentationRegistry.unregister(this);
}
@Override
import config { prefix config; revision-date 2013-04-05; }
import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
import opendaylight-sal-binding-broker-impl { prefix sal-broker; revision-date 2013-10-28; }
+ import groupbasedpolicy-cfg { prefix gbpcfg; revision-date 2015-11-06; }
description
"This module contains the base YANG definitions for iovisor-provider
case iovisor-provider-impl {
when "/config:modules/config:module/config:type = 'iovisor-provider-impl'";
- //wires in the data-broker service
+ // Wires in the data-broker service
container data-broker {
uses config:service-ref {
refine type {
}
}
}
- // RPC Registry
- container rpc-registry {
+ // EpRendererAugmentationRegistrar service
+ container ep-renderer-augmentation-registry {
uses config:service-ref {
refine type {
mandatory true;
- config:required-identity mdsal:binding-rpc-registry;
+ config:required-identity gbpcfg:ep-renderer-augmentation-registry;
}
}
}
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding:binding-new-notification-service</type>
<name>binding-notification-adapter</name>
</notification-adapter>
+
+ <ep-renderer-augmentation-registry>
+ <type xmlns:epr="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">epr:ep-renderer-augmentation-registry</type>
+ <name>ep-renderer-augmentation-registry</name>
+ </ep-renderer-augmentation-registry>
+
<gbp-ofoverlay-table-offset>0</gbp-ofoverlay-table-offset>
</module>
</modules>
return new OFOverlayRenderer(getDataBrokerDependency(),
getRpcRegistryDependency(),
getNotificationAdapterDependency(),
+ getEpRendererAugmentationRegistryDependency(),
getGbpOfoverlayTableOffset().shortValue());
}
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.OfOverlayAug;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.OfOverlayL3NatAug;
/**
* Renderer that uses OpenFlow and OVSDB to implement an overlay network
* using Open vSwitch.
-
*/
public class OFOverlayRenderer implements AutoCloseable, DataChangeListener {
private static final Logger LOG =
public OFOverlayRenderer(final DataBroker dataProvider,
RpcProviderRegistry rpcRegistry,
NotificationService notificationService,
+ EpRendererAugmentationRegistry epRendererAugmentationRegistry,
final short tableOffset) {
super();
this.dataBroker = dataProvider;
-
int numCPU = Runtime.getRuntime().availableProcessors();
//TODO: Consider moving to groupbasedpolicy-ofoverlay-config so as to be user configurable in distribution.
executor = Executors.newScheduledThreadPool(numCPU * 2);
switchManager = new SwitchManager(dataProvider);
endpointManager = new EndpointManager(dataProvider, rpcRegistry, notificationService,
- executor, switchManager);
+ executor, switchManager);
classifierDefinitionListener = new ClassifierDefinitionListener(dataBroker);
actionDefinitionListener = new ActionDefinitionListener(dataProvider);
// TODO we need register action/classifier validators to gpb-base
policyManager = new PolicyManager(dataProvider,
- switchManager,
- endpointManager,
- rpcRegistry,
- executor,
- tableOffset);
- ofOverlayAug = new OfOverlayAug(dataProvider);
- ofOverlayL3NatAug = new OfOverlayL3NatAug();
- Optional<OfOverlayConfig> config = readConfig();
- OfOverlayConfigBuilder configBuilder = new OfOverlayConfigBuilder();
- if (config.isPresent()) {
- configBuilder = new OfOverlayConfigBuilder(config.get());
- }
- registerConfigListener(dataProvider);
- if (configBuilder.getGbpOfoverlayTableOffset() == null) {
- configBuilder.setGbpOfoverlayTableOffset(tableOffset).build();
- writeTableOffset(configBuilder.build());
- }
+ switchManager,
+ endpointManager,
+ rpcRegistry,
+ executor,
+ tableOffset);
+ ofOverlayAug = new OfOverlayAug(dataProvider, epRendererAugmentationRegistry);
+ ofOverlayL3NatAug = new OfOverlayL3NatAug(epRendererAugmentationRegistry);
+ Optional<OfOverlayConfig> config = readConfig();
+ OfOverlayConfigBuilder configBuilder = new OfOverlayConfigBuilder();
+ if (config.isPresent()) {
+ configBuilder = new OfOverlayConfigBuilder(config.get());
+ }
+ registerConfigListener(dataProvider);
+ if (configBuilder.getGbpOfoverlayTableOffset() == null) {
+ configBuilder.setGbpOfoverlayTableOffset(tableOffset).build();
+ writeTableOffset(configBuilder.build());
+ }
}
// *************
private void registerConfigListener(DataBroker dataProvider) {
configReg =
dataProvider.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION,
- configIid,
- this,
- DataChangeScope.SUBTREE);
+ configIid,
+ this,
+ DataChangeScope.SUBTREE);
}
private Optional<OfOverlayConfig> readConfig() {
final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
Optional<OfOverlayConfig> config =
DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
- configIid,
- rTx);
+ configIid,
+ rTx);
rTx.close();
return config;
}
package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint;
-import java.util.AbstractMap.SimpleImmutableEntry;
-import java.util.Map;
-import java.util.concurrent.ExecutionException;
-
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
-import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
+import java.util.AbstractMap.SimpleImmutableEntry;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
public class OfOverlayAug implements EpRendererAugmentation, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(OfOverlayAug.class);
private final DataBroker dataProvider;
+ private EpRendererAugmentationRegistry epRendererAugmentationRegistry;
+
- public OfOverlayAug(DataBroker dataProvider) {
+ public OfOverlayAug(DataBroker dataProvider, EpRendererAugmentationRegistry epRendererAugmentationRegistry) {
this.dataProvider = dataProvider;
- EndpointRpcRegistry.register(this);
+ this.epRendererAugmentationRegistry = epRendererAugmentationRegistry;
+ epRendererAugmentationRegistry.register(this);
}
@Override
@Override
public void close() throws Exception {
- EndpointRpcRegistry.unregister(this);
+ epRendererAugmentationRegistry.unregister(this);
}
/**
import java.util.Map;
import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
-import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
public class OfOverlayL3NatAug implements EpRendererAugmentation, AutoCloseable {
- public OfOverlayL3NatAug() {
- EndpointRpcRegistry.register(this);
+ private EpRendererAugmentationRegistry epRendererAugmentationRegistry;
+
+ public OfOverlayL3NatAug(EpRendererAugmentationRegistry epRendererAugmentationRegistry) {
+ this.epRendererAugmentationRegistry = epRendererAugmentationRegistry;
+ this.epRendererAugmentationRegistry.register(this);
}
@Override
@Override
public void close() throws Exception {
- EndpointRpcRegistry.unregister(this);
+ this.epRendererAugmentationRegistry.unregister(this);
}
}
import ietf-yang-types { prefix "yang"; revision-date 2010-09-24; }
import opendaylight-sal-binding-broker-impl { prefix sal-broker; revision-date 2013-10-28;}
import ofoverlay { prefix ofoverlay; revision-date 2014-05-28; }
+ import groupbasedpolicy-cfg { prefix gbpcfg; revision-date 2015-11-06; }
description
"This module contains the base YANG definitions for
case ofoverlay-provider-impl {
when "/config:modules/config:module/config:type = 'ofoverlay-provider-impl'";
- //wires in the data-broker service
+ // Wires in the data-broker service
container data-broker {
uses config:service-ref {
refine type {
}
}
}
+ // EpRendererAugmentationRegistry service
+ container ep-renderer-augmentation-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity gbpcfg:ep-renderer-augmentation-registry;
+ }
+ }
+ }
uses ofoverlay:initial-values;
}
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
private DataBroker dataProvider;
private RpcProviderRegistry rpcRegistry;
+ private EndpointRpcRegistry endpointRpcRegistry;
private NotificationService notificationService;
private short tableOffset;
private CheckedFuture<Optional<OfOverlayConfig>, ReadFailedException> future;
dataProvider = mock(DataBroker.class);
rpcRegistry = mock(RpcProviderRegistry.class);
notificationService = mock(NotificationService.class);
+ endpointRpcRegistry = mock(EndpointRpcRegistry.class);
tableOffset = 5;
configReg = mock(ListenerRegistration.class);
when(
when(dataProvider.newReadOnlyTransaction()).thenReturn(readTransaction);
future = Futures.immediateCheckedFuture(Optional.<OfOverlayConfig> absent());
when(readTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(future);
- renderer = new OFOverlayRenderer(dataProvider, rpcRegistry, notificationService, tableOffset);
+ renderer = new OFOverlayRenderer(dataProvider, rpcRegistry, notificationService, endpointRpcRegistry, tableOffset);
}
@Test