Use module configuration to enable/disabe BGP.
Also hides BgpExtensionModule module to the user
(until HONEYCOMB-363 is fixed).
Change-Id: I8294d080138a0bcf640420484b76c089aa332d93
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
-io.fd.honeycomb.infra.bgp.BgpConfigurationModule
-io.fd.honeycomb.infra.bgp.BgpExtensionsModule
io.fd.honeycomb.infra.bgp.BgpModule
io.fd.honeycomb.infra.bgp.BgpReadersModule
io.fd.honeycomb.infra.bgp.BgpWritersModule
{
- "bgp-enabled": "true",
"bgp-binding-address": "127.0.0.1",
"bgp-port": 1790,
"bgp-as-number": 65000,
io.fd.honeycomb.infra.distro.restconf.RestconfModule,
io.fd.honeycomb.infra.distro.cfgattrs.CfgAttrsModule,
// io.fd.honeycomb.infra.bgp.BgpModule,
- // io.fd.honeycomb.infra.bgp.BgpExtensionsModule,
// io.fd.honeycomb.infra.bgp.BgpReadersModule,
// io.fd.honeycomb.infra.bgp.BgpWritersModule
</distribution.modules>
@BindConfig(value = "bgp", syntax = Syntax.JSON)
public class BgpConfiguration {
- public boolean isBgpEnabled() {
- return Boolean.valueOf(bgpEnabled);
- }
-
public boolean isBgpMultiplePathsEnabled() {
return Boolean.valueOf(bgpMultiplePaths.get());
}
- @InjectConfig("bgp-enabled")
- public String bgpEnabled;
@InjectConfig("bgp-binding-address")
public Optional<String> bgpBindingAddress;
@InjectConfig("bgp-port")
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
- .add("bgpEnabled", bgpEnabled)
.add("bgpBindingAddress", bgpBindingAddress)
.add("bgpPort", bgpPort)
.add("bgp-as-number", bgpAsNumber)
/**
* Load the configuration from json into HoneycombConfiguration and make it available.
*/
-public class BgpConfigurationModule extends AbstractModule {
+final class BgpConfigurationModule extends AbstractModule {
protected void configure() {
install(ConfigurationModule.create());
package io.fd.honeycomb.infra.bgp;
+import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
-import io.fd.honeycomb.northbound.NorthboundAbstractModule;
import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
/**
* Registers BGP extensions provided by ODL implementation.
- * TODO add support for flowspec (requires some special initialization)
+ * TODO(HONEYCOMB-363): create module per BGP extension
+ * TODO(HONEYCOMB-378): add support for flowspec (requires some special initialization)
*/
-public final class BgpExtensionsModule extends NorthboundAbstractModule<BgpConfiguration> {
+final class BgpExtensionsModule extends AbstractModule {
private static final Logger LOG = LoggerFactory.getLogger(BgpExtensionsModule.class);
- public BgpExtensionsModule() {
- super(new BgpConfigurationModule(), BgpConfiguration.class);
- }
-
protected void configure() {
- if (!getConfiguration().isBgpEnabled()) {
- LOG.debug("BGP disabled. Skipping initialization");
- return;
- }
LOG.debug("Initializing BgpExtensionsModule");
// This should be part of BgpModule, but that one is Private and Multibinders + private BASE_MODULES
// do not work together, that's why there's a dedicated module here
import static io.fd.honeycomb.infra.distro.data.InmemoryDOMDataBrokerProvider.CONFIG;
import static io.fd.honeycomb.infra.distro.data.InmemoryDOMDataBrokerProvider.OPERATIONAL;
+import com.google.inject.PrivateModule;
import com.google.inject.Singleton;
import com.google.inject.name.Names;
import io.fd.honeycomb.infra.distro.data.BindingDataBrokerProvider;
import io.fd.honeycomb.infra.distro.data.DataStoreProvider;
import io.fd.honeycomb.infra.distro.data.InmemoryDOMDataBrokerProvider;
-import io.fd.honeycomb.northbound.NorthboundPrivateModule;
import io.fd.honeycomb.translate.bgp.RibWriter;
import io.netty.channel.EventLoopGroup;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public final class BgpModule extends NorthboundPrivateModule<BgpConfiguration> {
+public final class BgpModule extends PrivateModule {
private static final Logger LOG = LoggerFactory.getLogger(BgpModule.class);
static final String HONEYCOMB_BGP = "honeycomb-bgp";
- public BgpModule() {
- super(new BgpConfigurationModule(), BgpConfiguration.class);
- }
-
protected void configure() {
- if (!getConfiguration().isBgpEnabled()) {
- LOG.debug("BGP disabled. Skipping initialization");
- return;
- }
LOG.debug("Initializing BgpModule");
- install(getConfigurationModule());
// Create BGPDispatcher BGPDispatcher for creating BGP clients
bind(EventLoopGroup.class).toProvider(BgpNettyThreadGroupProvider.class).in(Singleton.class);
bind(BGPDispatcher.class).toProvider(BGPDispatcherImplProvider.class).in(Singleton.class);
// (initialize eagerly to configure RouteWriters)
bind(RibWriter.class).toProvider(LocRibWriterProvider.class).asEagerSingleton();
expose(RibWriter.class);
+
+ // install other BGP modules (hidden from HC user):
+ install(new BgpConfigurationModule());
+ install(new BgpExtensionsModule());
}
private void configureRIB() {
package io.fd.honeycomb.infra.bgp;
+import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
-import io.fd.honeycomb.northbound.NorthboundAbstractModule;
import io.fd.honeycomb.translate.read.ReaderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class BgpReadersModule extends NorthboundAbstractModule<BgpConfiguration> {
+public final class BgpReadersModule extends AbstractModule {
private static final Logger LOG = LoggerFactory.getLogger(BgpReadersModule.class);
- public BgpReadersModule() {
- super(new BgpConfigurationModule(), BgpConfiguration.class);
- }
-
protected void configure() {
- if (!getConfiguration().isBgpEnabled()) {
- LOG.debug("BGP disabled. Skipping initialization");
- return;
- }
LOG.debug("Initializing BgpReadersModule");
// This should be part of BgpModule, but that one is Private and Multibinders + private BASE_MODULES
// do not work together, that's why there's a dedicated module here
package io.fd.honeycomb.infra.bgp;
+import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
-import io.fd.honeycomb.northbound.NorthboundAbstractModule;
import io.fd.honeycomb.translate.write.WriterFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class BgpWritersModule extends NorthboundAbstractModule<BgpConfiguration> {
+public final class BgpWritersModule extends AbstractModule {
private static final Logger LOG = LoggerFactory.getLogger(BgpWritersModule.class);
- public BgpWritersModule() {
- super(new BgpConfigurationModule(), BgpConfiguration.class);
- }
-
protected void configure() {
- if (!getConfiguration().isBgpEnabled()) {
- LOG.debug("BGP disabled. Skipping initialization");
- return;
- }
LOG.debug("Initializing BgpReadersModule");
// This should be part of BgpModule, but that one is Private and Multibinders + private BASE_MODULES
// do not work together, that's why there's a dedicated module here
{
- "bgp-enabled": "false",
"bgp-binding-address": "127.0.0.1",
"bgp-port": 1790,
"bgp-as-number": 65000,