summaryrefslogtreecommitdiffstats
path: root/infra/bgp-distribution/src/main/java/io
diff options
context:
space:
mode:
Diffstat (limited to 'infra/bgp-distribution/src/main/java/io')
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPDispatcherImplProvider.java36
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java46
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfiguration.java68
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfigurationModule.java33
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpExtensionsModule.java67
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java94
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNeighboursProvider.java125
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNettyThreadGroupProvider.java34
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java129
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java60
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReadersModule.java33
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpServerProvider.java107
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWriterFactoryProvider.java102
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWritersModule.java33
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/LocRibWriterProvider.java42
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java45
-rw-r--r--infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/distro/Main.java69
17 files changed, 0 insertions, 1123 deletions
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPDispatcherImplProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPDispatcherImplProvider.java
deleted file mode 100644
index c9ec39f35..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPDispatcherImplProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import io.netty.channel.EventLoopGroup;
-import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
-import org.opendaylight.protocol.bgp.rib.impl.BGPDispatcherImpl;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
-
-final class BGPDispatcherImplProvider extends ProviderTrait<BGPDispatcher> {
- @Inject
- private BGPExtensionConsumerContext consumerContext;
- @Inject
- private EventLoopGroup threadGroup;
-
- @Override
- protected BGPDispatcher create() {
- return new BGPDispatcherImpl(consumerContext.getMessageRegistry(), threadGroup, threadGroup);
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java
deleted file mode 100644
index 00e99ab99..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import java.util.ArrayList;
-import java.util.Set;
-import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
-import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
-import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
-import org.opendaylight.protocol.bgp.parser.spi.pojo.SimpleBGPExtensionProviderContext;
-import org.opendaylight.protocol.bgp.parser.spi.pojo.SimpleBGPExtensionProviderContextActivator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-final class BGPExtensionConsumerContextProvider extends ProviderTrait<BGPExtensionConsumerContext> {
- private static final Logger LOG = LoggerFactory.getLogger(BGPExtensionConsumerContextProvider.class);
-
- @Inject
- private Set<BGPExtensionProviderActivator> activators;
-
- @Override
- protected BGPExtensionConsumerContext create() {
- final BGPExtensionProviderContext ctx = new SimpleBGPExtensionProviderContext();
- final SimpleBGPExtensionProviderContextActivator activator =
- new SimpleBGPExtensionProviderContextActivator(ctx, new ArrayList<>(activators));
- LOG.debug("Starting BGPExtensionConsumerContext with activators: {}", activators);
- activator.start();
- return ctx;
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfiguration.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfiguration.java
deleted file mode 100644
index 9182dd3a0..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfiguration.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.common.base.MoreObjects;
-import java.util.Optional;
-import net.jmob.guice.conf.core.BindConfig;
-import net.jmob.guice.conf.core.InjectConfig;
-import net.jmob.guice.conf.core.Syntax;
-
-/**
- * This is the Java equivalent for bgp.json file. We use guice-config library to load all the config attributes
- * into this class instance.
- *
- * The BindConfig annotation tells that bgp.json file should be looked up on classpath root.
- */
-@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")
- public Optional<Integer> bgpPort;
- @InjectConfig("bgp-as-number")
- public Optional<Integer> bgpAsNumber;
- @InjectConfig("bgp-receive-multiple-paths")
- public Optional<String> bgpMultiplePaths;
- @InjectConfig("bgp-send-max-paths")
- public Optional<Integer> bgpSendMaxMaths;
- @InjectConfig("bgp-netty-threads")
- public Integer bgpNettyThreads;
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this)
- .add("bgpEnabled", bgpEnabled)
- .add("bgpBindingAddress", bgpBindingAddress)
- .add("bgpPort", bgpPort)
- .add("bgp-as-number", bgpAsNumber)
- .add("bgp-netty-threads", bgpNettyThreads)
- .add("bgp-receive-multiple-paths", bgpMultiplePaths)
- .add("bgp-send-max-paths", bgpSendMaxMaths)
- .toString();
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfigurationModule.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfigurationModule.java
deleted file mode 100644
index a1c2e765b..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpConfigurationModule.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.AbstractModule;
-import net.jmob.guice.conf.core.ConfigurationModule;
-
-/**
- * Load the configuration from json into HoneycombConfiguration and make it available.
- */
-public class BgpConfigurationModule extends AbstractModule {
-
- protected void configure() {
- install(ConfigurationModule.create());
- // Inject non-dependency configuration
- requestInjection(BgpConfiguration.class);
- }
-
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpExtensionsModule.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpExtensionsModule.java
deleted file mode 100644
index 650f637e5..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpExtensionsModule.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Singleton;
-import com.google.inject.multibindings.Multibinder;
-import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
-import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
-import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
-import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
-
-/**
- * Registers BGP extensions provided by ODL implementation.
- * TODO add support for flowspec (requires some special initialization)
- */
-public final class BgpExtensionsModule extends AbstractModule {
-
- protected void configure() {
- // 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
- // https://github.com/google/guice/issues/906
- configureRIBExtensions();
- configureBGPExtensions();
- }
-
- private void configureRIBExtensions() {
- final Multibinder<RIBExtensionProviderActivator> ribExtensionBinder = Multibinder.newSetBinder(binder(),
- RIBExtensionProviderActivator.class);
- ribExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.evpn.impl.RIBActivator.class);
- ribExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.inet.RIBActivator.class);
- ribExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.labeled.unicast.RIBActivator.class);
- ribExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator.class);
- ribExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.l3vpn.ipv4.RibIpv4Activator.class);
- ribExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.l3vpn.ipv6.RibIpv6Activator.class);
- bind(RIBExtensionConsumerContext.class).toProvider(RIBExtensionConsumerContextProvider.class)
- .in(Singleton.class);
- }
-
- private void configureBGPExtensions() {
- final Multibinder<BGPExtensionProviderActivator> bgpExtensionBinder = Multibinder.newSetBinder(binder(),
- BGPExtensionProviderActivator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.parser.impl.BGPActivator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.evpn.impl.BGPActivator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.inet.BGPActivator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.labeled.unicast.BGPActivator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.linkstate.impl.BGPActivator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.l3vpn.ipv4.BgpIpv4Activator.class);
- bgpExtensionBinder.addBinding().to(org.opendaylight.protocol.bgp.l3vpn.ipv6.BgpIpv6Activator.class);
- bind(BGPExtensionConsumerContext.class).toProvider(BGPExtensionConsumerContextProvider.class)
- .in(Singleton.class);
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java
deleted file mode 100644
index a26b5c158..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-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.translate.bgp.RibWriter;
-import io.netty.channel.EventLoopGroup;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore;
-import org.opendaylight.protocol.bgp.openconfig.impl.BGPOpenConfigMappingServiceImpl;
-import org.opendaylight.protocol.bgp.openconfig.spi.BGPOpenConfigMappingService;
-import org.opendaylight.protocol.bgp.rib.impl.StrictBGPPeerRegistry;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry;
-import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighbors;
-
-public final class BgpModule extends PrivateModule {
-
- static final String HONEYCOMB_BGP = "honeycomb-bgp";
-
- protected void configure() {
- // 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);
-
- configureRIB();
-
- // Configure peer registry
- bind(BGPOpenConfigMappingService.class).toInstance(new BGPOpenConfigMappingServiceImpl());
- bind(BGPPeerRegistry.class).toInstance(StrictBGPPeerRegistry.instance());
-
-
- // Create BGP server instance
- bind(BgpServerProvider.BgpServer.class).toProvider(BgpServerProvider.class).in(Singleton.class);
- expose(BgpServerProvider.BgpServer.class);
-
- // Initialize BgpNeighbours
- bind(BgpNeighbors.class).toProvider(BgpNeighboursProvider.class).in(Singleton.class);
- expose(BgpNeighbors.class);
-
- // Listens for local RIB modifications and passes routes to translation layer
- bind(RibWriter.class).toProvider(LocRibWriterProvider.class).asEagerSingleton();
- expose(RibWriter.class);
- }
-
- private void configureRIB() {
- // Create inmemory config data store for HONEYCOMB_BGP
- bind(InMemoryDOMDataStore.class).annotatedWith(Names.named(CONFIG))
- .toProvider(new DataStoreProvider(CONFIG, LogicalDatastoreType.CONFIGURATION))
- .in(Singleton.class);
-
- // Create inmemory operational data store for HONEYCOMB_BGP
- bind(InMemoryDOMDataStore.class).annotatedWith(Names.named(OPERATIONAL))
- .toProvider(new DataStoreProvider(OPERATIONAL, LogicalDatastoreType.OPERATIONAL))
- .in(Singleton.class);
-
- // Wrap datastores as DOMDataBroker
- // TODO make executor service configurable
- bind(DOMDataBroker.class).toProvider(InmemoryDOMDataBrokerProvider.class).in(Singleton.class);
-
- // Wrap DOMDataBroker as BA data broker (required by BgpReaderFactoryProvider)
- bind(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_BGP)).toProvider(BindingDataBrokerProvider.class)
- .in(Singleton.class);
- expose(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_BGP));
-
- // Create RIB instance
- bind(RIB.class).toProvider(BgpRIBProvider.class).in(Singleton.class);
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNeighboursProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNeighboursProvider.java
deleted file mode 100644
index fab14e827..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNeighboursProvider.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static io.fd.honeycomb.translate.util.JsonUtils.readContainerEntryJson;
-import static org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil.APPLICATION_PEER_GROUP_NAME;
-import static org.opendaylight.yangtools.sal.binding.generator.impl.BindingSchemaContextUtils.findDataNodeContainer;
-
-import com.google.common.base.Optional;
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import java.io.InputStream;
-import java.util.Map;
-import javax.annotation.Nonnull;
-import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
-import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.protocol.bgp.openconfig.spi.BGPOpenConfigMappingService;
-import org.opendaylight.protocol.bgp.rib.impl.StrictBGPPeerRegistry;
-import org.opendaylight.protocol.bgp.rib.impl.config.AppPeer;
-import org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry;
-import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborPeerGroupConfig;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighbors;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.NetworkInstances;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstance;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstanceKey;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.Protocols;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolKey;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.BGP;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config2;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Protocol1;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-final class BgpNeighboursProvider extends ProviderTrait<BgpNeighbors> {
- private static final Logger LOG = LoggerFactory.getLogger(BgpNeighboursProvider.class);
- private static final String PEERS_CFG = "/bgp-peers.json";
- @Inject
- private BindingToNormalizedNodeCodec codec;
- @Inject
- private RIB globalRib;
- @Inject
- private BGPOpenConfigMappingService mappingService;
- @Inject
- private SchemaService schemaService;
- @Inject
- private BGPPeerRegistry peerRegistry;
-
- @Override
- protected BgpNeighbors create() {
- final BgpNeighbors neighbors = readNeighbours();
- for (final Neighbor neighbor : neighbors.getNeighbor()) {
- if (isApplicationPeer(neighbor)) {
- LOG.trace("Starting AppPeer for {}", neighbor);
- new AppPeer().start(globalRib, neighbor, mappingService, null);
- } else {
- LOG.trace("Starting BgpPeer for {}", neighbor);
- new BgpPeer(null, peerRegistry).start(globalRib, neighbor, mappingService, null);
- }
- }
- LOG.debug("BgpNeighbours initialized: {}", neighbors);
- return neighbors;
- }
-
- private Neighbors readNeighbours() {
- LOG.debug("Reading BGP neighbours from {}", PEERS_CFG);
- final InputStream resourceStream = this.getClass().getResourceAsStream(PEERS_CFG);
- checkState(resourceStream != null, "Resource %s not found", PEERS_CFG);
-
- final InstanceIdentifier<Bgp> bgpII = InstanceIdentifier.create(NetworkInstances.class)
- .child(NetworkInstance.class, new NetworkInstanceKey("dummy-value")).child(Protocols.class)
- .child(Protocol.class, new ProtocolKey(BGP.class, "dummy-value")).augmentation(Protocol1.class)
- .child(Bgp.class);
- final InstanceIdentifier<Neighbors> neighborsII = bgpII.child(Neighbors.class);
-
- final YangInstanceIdentifier neighborsYII = codec.toYangInstanceIdentifier(neighborsII);
- final SchemaContext schemaContext = schemaService.getGlobalContext();
- final Optional<DataNodeContainer> parentNode = findDataNodeContainer(schemaContext, bgpII);
- final ContainerNode parentContainer = readContainerEntryJson(schemaContext, resourceStream,
- (SchemaNode) parentNode.get(),
- (YangInstanceIdentifier.NodeIdentifier) neighborsYII.getLastPathArgument());
- final NormalizedNode<?, ?> neighborsContainer = parentContainer.getValue().iterator().next();
-
- final Map.Entry<InstanceIdentifier<?>, DataObject> entry = codec.fromNormalizedNode(neighborsYII, neighborsContainer);
- checkNotNull(entry, "Failed to deserialize neighbours configuration at %s", PEERS_CFG);
- return (Neighbors) entry.getValue();
- }
-
- private static boolean isApplicationPeer(@Nonnull final Neighbor neighbor) {
- return java.util.Optional.of(neighbor.getConfig())
- .map(config -> config.getAugmentation(Config2.class))
- .map(BgpNeighborPeerGroupConfig::getPeerGroup)
- .map(APPLICATION_PEER_GROUP_NAME::equals)
- .orElse(false);
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNettyThreadGroupProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNettyThreadGroupProvider.java
deleted file mode 100644
index 8208a4320..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpNettyThreadGroupProvider.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import io.netty.channel.nio.NioEventLoopGroup;
-
-final class BgpNettyThreadGroupProvider extends ProviderTrait<NioEventLoopGroup> {
-
- @Inject
- private BgpConfiguration cfgAttributes;
-
- @Override
- protected NioEventLoopGroup create() {
- return new NioEventLoopGroup(cfgAttributes.bgpNettyThreads,
- new ThreadFactoryBuilder().setNameFormat("bgp-netty-%d").build());
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java
deleted file mode 100644
index a2bd56df3..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.common.collect.ImmutableList;
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.broker.impl.PingPongDataBroker;
-import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
-import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode;
-import org.opendaylight.protocol.bgp.openconfig.spi.BGPOpenConfigMappingService;
-import org.opendaylight.protocol.bgp.rib.impl.RIBImpl;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
-import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
-import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4LABELLEDUNICAST;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi2;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi2Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-final class BgpRIBProvider extends ProviderTrait<RIB> {
- private static final Logger LOG = LoggerFactory.getLogger(BgpRIBProvider.class);
- private static final String HC_BGP_INSTANCE_NAME = "hc-bgp-instance";
-
- @Inject
- private BgpConfiguration cfg;
- @Inject
- private RIBExtensionConsumerContext extensions;
- @Inject
- private BGPDispatcher dispatcher;
- @Inject
- private BindingToNormalizedNodeCodec codec;
- @Inject
- private DOMDataBroker domBroker;
- @Inject
- private BGPOpenConfigMappingService mappingService;
- @Inject
- private SchemaService schemaService;
-
- @Override
- protected RIB create() {
- final AsNumber asNumber = new AsNumber(cfg.bgpAsNumber.get().longValue());
- final Ipv4Address routerId = new Ipv4Address(cfg.bgpBindingAddress.get());
- final ClusterIdentifier clusterId = new ClusterIdentifier(routerId);
- LOG.debug("Creating BGP RIB: routerId={}, asNumber={}", routerId, asNumber);
- // TODO configure other BGP Multiprotocol extensions:
- final List<AfiSafi> afiSafi = ImmutableList.of(
- new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
- .addAugmentation(AfiSafi2.class,
- new AfiSafi2Builder().setReceive(cfg.isBgpMultiplePathsEnabled())
- .setSendMax(cfg.bgpSendMaxMaths.get().shortValue()).build())
- .build(),
- new AfiSafiBuilder().setAfiSafiName(IPV4LABELLEDUNICAST.class)
- .addAugmentation(AfiSafi2.class,
- new AfiSafi2Builder().setReceive(cfg.isBgpMultiplePathsEnabled())
- .setSendMax(cfg.bgpSendMaxMaths.get().shortValue()).build())
- .build()
- );
- final Map<TablesKey, PathSelectionMode> pathSelectionModes = mappingService.toPathSelectionMode(afiSafi)
- .entrySet().stream().collect(Collectors.toMap(entry ->
- new TablesKey(entry.getKey().getAfi(), entry.getKey().getSafi()), Map.Entry::getValue));
- // based on RIBImpl.createRib
- final RIBImpl rib =
- new RIBImpl(new NoopClusterSingletonServiceProvider(), new RibId(HC_BGP_INSTANCE_NAME), asNumber,
- new BgpId(routerId), clusterId, extensions, dispatcher, codec, new PingPongDataBroker(domBroker),
- mappingService.toTableTypes(afiSafi), pathSelectionModes, extensions.getClassLoadingStrategy(), null);
-
- // required for proper RIB's CodecRegistry initialization (based on RIBImpl.start)
- schemaService.registerSchemaContextListener(rib);
-
- LOG.debug("BGP RIB created successfully: {}", rib);
- return rib;
- }
-
- /**
- * HC does not support clustering, but BGP uses {@link ClusterSingletonServiceProvider}
- * to initialize {@link RIBImpl}. Therefore we provide this dummy implementation.
- */
- private static final class NoopClusterSingletonServiceProvider implements ClusterSingletonServiceProvider {
- private static final Logger LOG = LoggerFactory.getLogger(NoopClusterSingletonServiceProvider.class);
-
- private static final ClusterSingletonServiceRegistration REGISTRATION =
- () -> LOG.debug("Closing ClusterSingletonServiceRegistration");
-
- @Override
- public ClusterSingletonServiceRegistration registerClusterSingletonService(
- final ClusterSingletonService clusterSingletonService) {
- clusterSingletonService.instantiateServiceInstance();
- return REGISTRATION;
- }
-
- @Override
- public void close() throws Exception {
- LOG.debug("Closing NoopClusterSingletonServiceProvider");
- }
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java
deleted file mode 100644
index b79074f10..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import io.fd.honeycomb.translate.read.ReaderFactory;
-import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder;
-import io.fd.honeycomb.translate.util.read.BindingBrokerReader;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.BgpRib;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.BgpRibBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-final class BgpReaderFactoryProvider extends ProviderTrait<ReaderFactory> {
-
- @Inject
- @Named(BgpModule.HONEYCOMB_BGP)
- private DataBroker bgpDataBroker;
-
- @Override
- protected BgpReaderFactory create() {
- return new BgpReaderFactory(bgpDataBroker);
- }
-
- /**
- * {@link ReaderFactory} provides reader form BGP's dedicated data store.
- * Makes BGP operational data available over NETCONF/RESTCONF.
- */
- private static final class BgpReaderFactory implements ReaderFactory {
-
- private final DataBroker bgpDataBroker;
-
- BgpReaderFactory(final DataBroker bgpDataBroker) {
- this.bgpDataBroker = bgpDataBroker;
- }
-
- @Override
- public void init(final ModifiableReaderRegistryBuilder registry) {
- registry.add(new BindingBrokerReader<>(InstanceIdentifier.create(BgpRib.class),
- bgpDataBroker, LogicalDatastoreType.OPERATIONAL, BgpRibBuilder.class));
- }
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReadersModule.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReadersModule.java
deleted file mode 100644
index 745a94269..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpReadersModule.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-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.translate.read.ReaderFactory;
-
-public class BgpReadersModule extends AbstractModule {
-
- protected void configure() {
- // 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
- // https://github.com/google/guice/issues/906
- final Multibinder<ReaderFactory> binder = Multibinder.newSetBinder(binder(), ReaderFactory.class);
- binder.addBinding().toProvider(BgpReaderFactoryProvider.class).in(Singleton.class);
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpServerProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpServerProvider.java
deleted file mode 100644
index 27dad8840..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpServerProvider.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelConfig;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.epoll.Epoll;
-import io.netty.channel.epoll.EpollChannelOption;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.UnknownHostException;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry;
-import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences;
-import org.opendaylight.protocol.bgp.rib.impl.spi.PeerRegistryListener;
-import org.opendaylight.protocol.concepts.KeyMapping;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class BgpServerProvider extends ProviderTrait<BgpServerProvider.BgpServer> {
- private static final Logger LOG = LoggerFactory.getLogger(BgpServerProvider.class);
- @Inject
- private BgpConfiguration cfg;
- @Inject
- private BGPPeerRegistry peerRegistry;
- @Inject
- private BGPDispatcher dispatcher;
-
- @Override
- protected BgpServer create() {
- // code based on org.opendaylight.controller.config.yang.bgp.rib.impl.BGPPeerAcceptorModule from Boron-SR3
- final InetAddress bindingAddress;
- try {
- bindingAddress = InetAddress.getByName(cfg.bgpBindingAddress.get());
- } catch (UnknownHostException e) {
- throw new IllegalArgumentException("Illegal BGP binding address", e);
- }
- final InetSocketAddress address = new InetSocketAddress(bindingAddress, cfg.bgpPort.get());
- LOG.debug("Creating BgpServer for {}", address);
- final ChannelFuture localServer = dispatcher.createServer(peerRegistry, address);
- localServer.addListener(future -> {
- Preconditions.checkArgument(future.isSuccess(), "Unable to start bgp server on %s", address, future.cause());
- final Channel channel = localServer.channel();
- if (Epoll.isAvailable()) {
- peerRegistry.registerPeerRegisterListener(new PeerRegistryListenerImpl(channel.config()));
- }
- });
- final BgpServer server = new BgpServer(localServer);
- LOG.debug("BgpServer successfully created.");
- return server;
- }
-
- public static final class BgpServer {
- private ChannelFuture localServer;
-
- BgpServer(final ChannelFuture localServer) {
- this.localServer = localServer;
- }
-
- public ChannelFuture getLocalServer() {
- return localServer;
- }
- }
-
- private static final class PeerRegistryListenerImpl implements PeerRegistryListener {
- private final ChannelConfig channelConfig;
- private final KeyMapping keys;
-
- PeerRegistryListenerImpl(final ChannelConfig channelConfig) {
- this.channelConfig = channelConfig;
- this.keys = KeyMapping.getKeyMapping();
- }
- @Override
- public void onPeerAdded(final IpAddress ip, final BGPSessionPreferences prefs) {
- if (prefs.getMd5Password().isPresent()) {
- this.keys.put(IetfInetUtil.INSTANCE.inetAddressFor(ip), prefs.getMd5Password().get());
- this.channelConfig.setOption(EpollChannelOption.TCP_MD5SIG, this.keys);
- }
- }
- @Override
- public void onPeerRemoved(final IpAddress ip) {
- if (this.keys.remove(IetfInetUtil.INSTANCE.inetAddressFor(ip)) != null) {
- this.channelConfig.setOption(EpollChannelOption.TCP_MD5SIG, this.keys);
- }
- }
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWriterFactoryProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWriterFactoryProvider.java
deleted file mode 100644
index 81faabbe5..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWriterFactoryProvider.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import io.fd.honeycomb.translate.util.write.BindingBrokerWriter;
-import io.fd.honeycomb.translate.write.WriterFactory;
-import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.routes.Ipv4Routes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.routes.ipv4.routes.Ipv4Route;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev150525.labeled.unicast.LabelStack;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev150525.labeled.unicast.routes.LabeledUnicastRoutes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev150525.labeled.unicast.routes.list.LabeledUnicastRoute;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.LocalPref;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.Origin;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.ApplicationRib;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.ipv4.next.hop._case.Ipv4NextHop;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-final class BgpWriterFactoryProvider extends ProviderTrait<WriterFactory> {
- @Inject
- @Named(BgpModule.HONEYCOMB_BGP)
- private DataBroker bgpDataBroker;
- @Override
- protected BgpWriterFactory create() {
- return new BgpWriterFactory(bgpDataBroker);
- }
-
- /**
- * {@link WriterFactory} for BGP cfg write integration with HC writer registry.
- * Using BindingBrokerWriter to write BGP configuration data via dedicated broker that, unlike
- * {@link io.fd.honeycomb.data.impl.DataBroker}, supports tx chains and DOMDataChangeListener registration
- * extensively used by ODL's bgp.
- *
- * As a bonus BGP route configuration is persisted and available for read via RESTCONF/NETCONF.
- */
- private static final class BgpWriterFactory implements WriterFactory {
- private final DataBroker dataBroker;
-
- private static final InstanceIdentifier<ApplicationRib> AR_IID =
- InstanceIdentifier.create(ApplicationRib.class);
- private static final InstanceIdentifier<Tables> TABLES_IID = AR_IID.child(Tables.class);
- private static final InstanceIdentifier<Ipv4Routes> IPV4_ROUTES_IID = TABLES_IID.child((Class) Ipv4Routes.class);
- private static final InstanceIdentifier<Ipv4Route> IPV4_ROUTE_IID = IPV4_ROUTES_IID.child(Ipv4Route.class);
- private static final InstanceIdentifier<LabeledUnicastRoutes> LABELED_UNICAST_ROUTES_IID = TABLES_IID.child((Class) LabeledUnicastRoutes.class);
- private static final InstanceIdentifier<LabeledUnicastRoute> LABELED_UNICAST_ROUTE_IID = LABELED_UNICAST_ROUTES_IID.child(LabeledUnicastRoute.class);
-
- private BgpWriterFactory(final DataBroker dataBroker) {
- this.dataBroker = dataBroker;
- }
-
- // TODO (HONEYCOMB-359):
- // BGP models are huge, we need some kind of wildcarded subtree writer, that works for whole subtree.
- // 1) we can either move checking handledTypes to writers (getHandledTypes, isAffected, writer.getHandedTypes, ...)
- // but then precondition check in flatWriterRegistry might be slower (we need to check if we have all writers
- // in order to avoid unnecessary reverts).
- //
- // 2) alternative is to compute all child nodes during initialization (might introduce some footprint penalty).
- @Override
- public void init(final ModifiableWriterRegistryBuilder registry) {
- registry.subtreeAdd(
- Sets.newHashSet(
- TABLES_IID,
- IPV4_ROUTES_IID,
- IPV4_ROUTES_IID.child(Ipv4Route.class),
- IPV4_ROUTE_IID.child(Attributes.class),
- IPV4_ROUTE_IID.child(Attributes.class).child(Origin.class),
- IPV4_ROUTE_IID.child(Attributes.class).child(LocalPref.class),
- IPV4_ROUTE_IID.child(Attributes.class).child(Ipv4NextHop.class),
- LABELED_UNICAST_ROUTES_IID,
- LABELED_UNICAST_ROUTE_IID,
- LABELED_UNICAST_ROUTE_IID.child(Attributes.class),
- LABELED_UNICAST_ROUTE_IID.child(Attributes.class).child(Origin.class),
- LABELED_UNICAST_ROUTE_IID.child(Attributes.class).child(LocalPref.class),
- LABELED_UNICAST_ROUTE_IID.child(Attributes.class).child(Ipv4NextHop.class),
- LABELED_UNICAST_ROUTE_IID.child(LabelStack.class)
- ),
- new BindingBrokerWriter<>(InstanceIdentifier.create(ApplicationRib.class), dataBroker)
- );
- }
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWritersModule.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWritersModule.java
deleted file mode 100644
index f1e92c4ba..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/BgpWritersModule.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-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.translate.write.WriterFactory;
-
-public class BgpWritersModule extends AbstractModule {
-
- protected void configure() {
- // 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
- // https://github.com/google/guice/issues/906
- final Multibinder<WriterFactory> binder = Multibinder.newSetBinder(binder(), WriterFactory.class);
- binder.addBinding().toProvider(BgpWriterFactoryProvider.class).in(Singleton.class);
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/LocRibWriterProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/LocRibWriterProvider.java
deleted file mode 100644
index 1fc6b25ed..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/LocRibWriterProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-import io.fd.honeycomb.bgp.translate.impl.LocRibWriter;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import io.fd.honeycomb.translate.bgp.RouteWriterFactory;
-import java.util.HashSet;
-import java.util.Set;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-
-final class LocRibWriterProvider extends ProviderTrait<LocRibWriter> {
-
- @Inject
- @Named(BgpModule.HONEYCOMB_BGP)
- private DataBroker bgpDataBroker;
- @Inject(optional = true)
- private Set<RouteWriterFactory> writerFactories = new HashSet<>();
-
- @Override
- protected LocRibWriter create() {
- final LocRibWriter registry = new LocRibWriter(bgpDataBroker);
- writerFactories.stream().forEach(factory -> factory.init(registry));
- return registry;
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java
deleted file mode 100644
index b90b7880c..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp;
-
-import com.google.inject.Inject;
-import io.fd.honeycomb.infra.distro.ProviderTrait;
-import java.util.ArrayList;
-import java.util.Set;
-import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
-import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
-import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
-import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext;
-import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContextActivator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RIBExtensionConsumerContextProvider extends ProviderTrait<RIBExtensionConsumerContext> {
- private static final Logger LOG = LoggerFactory.getLogger(RIBExtensionConsumerContextProvider.class);
- @Inject
- private Set<RIBExtensionProviderActivator> activators;
-
- @Override
- protected RIBExtensionConsumerContext create() {
- final RIBExtensionProviderContext ctx = new SimpleRIBExtensionProviderContext();
- final SimpleRIBExtensionProviderContextActivator activator =
- new SimpleRIBExtensionProviderContextActivator(ctx, new ArrayList<>(activators));
- LOG.debug("Starting RIBExtensionConsumerContext with activators: {}", activators);
- activator.start();
- return ctx;
- }
-}
diff --git a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/distro/Main.java b/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/distro/Main.java
deleted file mode 100644
index 8994f0415..000000000
--- a/infra/bgp-distribution/src/main/java/io/fd/honeycomb/infra/bgp/distro/Main.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.infra.bgp.distro;
-
-import com.google.inject.ConfigurationException;
-import com.google.inject.CreationException;
-import com.google.inject.Injector;
-import com.google.inject.ProvisionException;
-import io.fd.honeycomb.infra.bgp.BgpConfiguration;
-import io.fd.honeycomb.infra.bgp.BgpServerProvider;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighbors;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class Main {
-
- private static final Logger LOG = LoggerFactory.getLogger(Main.class);
-
- private Main() {
- }
-
- public static void main(String[] args) {
- init();
- }
-
- /**
- * Initialize the Honeycomb with provided modules
- */
- public static Injector init() {
- try {
- Injector injector = io.fd.honeycomb.infra.distro.Main.init();
- final BgpConfiguration bgpAttributes = injector.getInstance(BgpConfiguration.class);
-
- if (bgpAttributes.isBgpEnabled()) {
- LOG.info("Starting BGP");
- injector.getInstance(BgpServerProvider.BgpServer.class);
- LOG.info("Initializing BgpNeighbours");
- injector.getInstance(BgpNeighbors.class);
- LOG.info("BGP started successfully!");
- }
-
- return injector;
- } catch (CreationException | ProvisionException | ConfigurationException e) {
- LOG.error("Failed to initialize Honeycomb components", e);
- throw e;
- } catch (RuntimeException e) {
- LOG.error("Unexpected initialization failure", e);
- throw e;
- } finally {
- // Trigger gc to force collect initial garbage + dedicated classloader
- System.gc();
- }
- }
-
-}