X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderers%2Fvpp%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fconfig%2Fvpp_provider%2Fimpl%2FVppRenderer.java;h=9dc7a8537fef15925d7bac222bc9d31fccd76efc;hb=c08448e7efc556efd8ae61ae38c54719962f7b61;hp=cf90406a2971cf72bf9ff25035f4db9ea62944de;hpb=9dbdafae3b2fe918f9aae098953dedd5c4c15f61;p=groupbasedpolicy.git diff --git a/renderers/vpp/src/main/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRenderer.java b/renderers/vpp/src/main/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRenderer.java index cf90406a2..9dc7a8537 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRenderer.java +++ b/renderers/vpp/src/main/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRenderer.java @@ -8,10 +8,12 @@ package org.opendaylight.controller.config.yang.config.vpp_provider.impl; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.eventbus.EventBus; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; @@ -19,16 +21,23 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; +import org.opendaylight.groupbasedpolicy.renderer.vpp.api.BridgeDomainManager; +import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.AclManager; import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.InterfaceManager; import org.opendaylight.groupbasedpolicy.renderer.vpp.listener.RendererPolicyListener; import org.opendaylight.groupbasedpolicy.renderer.vpp.listener.VppEndpointListener; import org.opendaylight.groupbasedpolicy.renderer.vpp.listener.VppNodeListener; -import org.opendaylight.groupbasedpolicy.renderer.vpp.manager.BridgeDomainManagerImpl; import org.opendaylight.groupbasedpolicy.renderer.vpp.manager.VppNodeManager; +import org.opendaylight.groupbasedpolicy.renderer.vpp.nat.NatManager; +import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.BridgeDomainManagerImpl; import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.ForwardingManager; import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.VppRendererPolicyManager; +import org.opendaylight.groupbasedpolicy.renderer.vpp.routing.RoutingManager; import org.opendaylight.groupbasedpolicy.renderer.vpp.sf.AllowAction; +import org.opendaylight.groupbasedpolicy.renderer.vpp.sf.Classifier; import org.opendaylight.groupbasedpolicy.renderer.vpp.sf.EtherTypeClassifier; +import org.opendaylight.groupbasedpolicy.renderer.vpp.sf.IpProtoClassifier; +import org.opendaylight.groupbasedpolicy.renderer.vpp.sf.L4Classifier; import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider; import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName; @@ -44,47 +53,53 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.r import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; -import com.google.common.eventbus.EventBus; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; public class VppRenderer implements AutoCloseable, BindingAwareProvider { - private static final Logger LOG = LoggerFactory.getLogger(VppRenderer.class); - public static final RendererName NAME = new RendererName("vpp-renderer"); - /** - * Should be used for processing netconf responses so we do not consume netty thread. - */ - private static final ExecutorService NETCONF_WORKER = Executors.newSingleThreadExecutor( - new ThreadFactoryBuilder().setNameFormat("netconf-processing-worker-%d").setDaemon(true).build()); - + private static final Logger LOG = LoggerFactory.getLogger(VppRenderer.class); private final List actionDefinitions = ImmutableList.of(new SupportedActionDefinitionBuilder().setActionDefinitionId(new AllowAction().getId()) - .setSupportedParameterValues(new AllowAction().getSupportedParameterValues()) - .build()); - private final List classifierDefinitions = ImmutableList - .of(new SupportedClassifierDefinitionBuilder().setClassifierDefinitionId(new EtherTypeClassifier(null).getId()) - .setSupportedParameterValues(new EtherTypeClassifier(null).getSupportedParameterValues()) - .build()); + .setSupportedParameterValues(new AllowAction().getSupportedParameterValues()) + .build()); + private final List classifierDefinitions; private final DataBroker dataBroker; - - private VppNodeManager vppNodeManager; + private final String publicInterfaces; private InterfaceManager interfaceManager; - private VppRendererPolicyManager vppRendererPolicyManager; - + private MountedDataBrokerProvider mountDataProvider; + private BridgeDomainManager bdManager; private VppNodeListener vppNodeListener; private VppEndpointListener vppEndpointListener; private RendererPolicyListener rendererPolicyListener; - public VppRenderer(DataBroker dataBroker, BindingAwareBroker bindingAwareBroker) { + VppRenderer(@Nonnull DataBroker dataBroker, @Nonnull BindingAwareBroker bindingAwareBroker, + @Nullable String publicInterfaces) { this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.publicInterfaces = publicInterfaces; bindingAwareBroker.registerProvider(this); + EtherTypeClassifier etherTypeClassifier = new EtherTypeClassifier(null); + IpProtoClassifier ipProtoClassifier = new IpProtoClassifier(etherTypeClassifier); + classifierDefinitions = + buildClassifierDefinitions(etherTypeClassifier, ipProtoClassifier, new L4Classifier(ipProtoClassifier)); + } + + private List buildClassifierDefinitions(Classifier... classifs) { + List clDefs = new ArrayList<>(); + SupportedClassifierDefinitionBuilder clDefBuilder = new SupportedClassifierDefinitionBuilder(); + for (Classifier classif : classifs) { + if (classif.getParent() != null) { + clDefBuilder.setParentClassifierDefinitionId(classif.getParent().getId()); + } + clDefs.add(clDefBuilder.setClassifierDefinitionId(classif.getId()) + .setSupportedParameterValues(classif.getSupportedParameterValues()) + .build()); + } + return clDefs; } @Override @@ -111,20 +126,25 @@ public class VppRenderer implements AutoCloseable, BindingAwareProvider { MountPointService mountService = Preconditions.checkNotNull(providerContext.getSALService(MountPointService.class)); - MountedDataBrokerProvider mountDataProvider = new MountedDataBrokerProvider(mountService); - vppNodeManager = new VppNodeManager(dataBroker, providerContext); - - EventBus dtoEventBus = new EventBus("DTO events"); - interfaceManager = new InterfaceManager(mountDataProvider, dataBroker, NETCONF_WORKER); + mountDataProvider = new MountedDataBrokerProvider(mountService, dataBroker); + VppNodeManager vppNodeManager = new VppNodeManager(dataBroker, providerContext, publicInterfaces); + + EventBus dtoEventBus = new EventBus((exception, context) -> LOG.error("Could not dispatch event: {} to {}", + context.getSubscriber(), context.getSubscriberMethod(), exception)); + interfaceManager = new InterfaceManager(mountDataProvider, dataBroker); + AclManager aclManager = new AclManager(mountDataProvider); + NatManager natManager = new NatManager(dataBroker, mountDataProvider); dtoEventBus.register(interfaceManager); - ForwardingManager fwManager = new ForwardingManager(interfaceManager, new BridgeDomainManagerImpl(dataBroker)); - vppRendererPolicyManager = new VppRendererPolicyManager(fwManager, dataBroker); + RoutingManager routingManager = new RoutingManager(dataBroker, mountDataProvider); + bdManager = new BridgeDomainManagerImpl(dataBroker); + ForwardingManager fwManager = + new ForwardingManager(interfaceManager, aclManager, natManager, routingManager, bdManager, dataBroker); + VppRendererPolicyManager vppRendererPolicyManager = new VppRendererPolicyManager(fwManager, aclManager, dataBroker); dtoEventBus.register(vppRendererPolicyManager); vppNodeListener = new VppNodeListener(dataBroker, vppNodeManager, dtoEventBus); vppEndpointListener = new VppEndpointListener(dataBroker, dtoEventBus); rendererPolicyListener = new RendererPolicyListener(dataBroker, dtoEventBus); - registerToRendererManager(); } @@ -132,11 +152,11 @@ public class VppRenderer implements AutoCloseable, BindingAwareProvider { WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); Renderer renderer = new RendererBuilder().setName(VppRenderer.NAME) - .setRendererNodes(new RendererNodesBuilder().build()) - .setCapabilities(new CapabilitiesBuilder().setSupportedActionDefinition(actionDefinitions) - .setSupportedClassifierDefinition(classifierDefinitions) - .build()) - .build(); + .setRendererNodes(new RendererNodesBuilder().build()) + .setCapabilities(new CapabilitiesBuilder().setSupportedActionDefinition(actionDefinitions) + .setSupportedClassifierDefinition(classifierDefinitions) + .build()) + .build(); writeTransaction.put(LogicalDatastoreType.OPERATIONAL, VppIidFactory.getRendererIID(renderer.getKey()), renderer, true); @@ -144,7 +164,7 @@ public class VppRenderer implements AutoCloseable, BindingAwareProvider { Futures.addCallback(future, new FutureCallback() { @Override - public void onFailure(Throwable throwable) { + public void onFailure(@Nonnull Throwable throwable) { LOG.error("Could not register renderer {}: {}", renderer, throwable); } @@ -164,7 +184,7 @@ public class VppRenderer implements AutoCloseable, BindingAwareProvider { Futures.addCallback(future, new FutureCallback() { @Override - public void onFailure(Throwable throwable) { + public void onFailure(@Nonnull Throwable throwable) { LOG.error("Could not unregister renderer {}: {}", VppRenderer.NAME, throwable); } @@ -174,4 +194,16 @@ public class VppRenderer implements AutoCloseable, BindingAwareProvider { } }); } + + public MountedDataBrokerProvider getMountedDataBroker() { + return mountDataProvider; + } + + public InterfaceManager getInterfaceManager() { + return interfaceManager; + } + + public BridgeDomainManager getBridgeDomainManager() { + return bdManager; + } }