2 * Copyright (c) 2016 Cisco and/or its affiliates.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package io.fd.honeycomb.translate.v3po;
19 import com.google.inject.AbstractModule;
20 import com.google.inject.multibindings.Multibinder;
21 import com.google.inject.name.Names;
22 import io.fd.honeycomb.notification.ManagedNotificationProducer;
23 import io.fd.honeycomb.translate.read.ReaderFactory;
24 import io.fd.honeycomb.translate.v3po.cfgattrs.V3poConfiguration;
25 import io.fd.honeycomb.translate.v3po.interfaces.acl.egress.EgressIetfAclWriter;
26 import io.fd.honeycomb.translate.v3po.interfaces.acl.ingress.IngressIetfAclWriter;
27 import io.fd.honeycomb.translate.v3po.notification.InterfaceChangeNotificationProducer;
28 import io.fd.honeycomb.translate.v3po.vppclassifier.VppClassifierContextManager;
29 import io.fd.honeycomb.translate.v3po.vppclassifier.VppClassifierContextManagerImpl;
30 import io.fd.honeycomb.translate.vpp.util.NamingContext;
31 import io.fd.honeycomb.translate.write.WriterFactory;
32 import java.util.concurrent.Executors;
33 import java.util.concurrent.ScheduledExecutorService;
34 import net.jmob.guice.conf.core.ConfigurationModule;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
38 public class V3poModule extends AbstractModule {
40 private static final Logger LOG = LoggerFactory.getLogger(V3poModule.class);
43 protected void configure() {
44 LOG.debug("Installing V3PO module");
45 install(ConfigurationModule.create());
46 requestInjection(V3poConfiguration.class);
48 // TODO HONEYCOMB-173 put into constants
50 bind(NamingContext.class)
51 .annotatedWith(Names.named("interface-context"))
52 .toInstance(new NamingContext("interface-", "interface-context"));
53 bind(NamingContext.class)
54 .annotatedWith(Names.named("bridge-domain-context"))
55 .toInstance(new NamingContext("bridge-domain-", "bridge-domain-context"));
56 bind(VppClassifierContextManager.class)
57 .annotatedWith(Names.named("classify-table-context"))
58 .toInstance(new VppClassifierContextManagerImpl("classify-table-"));
60 // Executor needed for keepalives
61 bind(ScheduledExecutorService.class).toInstance(Executors.newScheduledThreadPool(1));
64 bind(IngressIetfAclWriter.class).toProvider(IngressIetfAClWriterProvider.class);
65 bind(EgressIetfAclWriter.class).toProvider(EgressIetfAClWriterProvider.class);
66 // Context utility for deleted interfaces
67 bind(DisabledInterfacesManager.class).toInstance(new DisabledInterfacesManager());
70 final Multibinder<ReaderFactory> readerFactoryBinder = Multibinder.newSetBinder(binder(), ReaderFactory.class);
71 readerFactoryBinder.addBinding().to(InterfacesStateReaderFactory.class);
72 readerFactoryBinder.addBinding().to(VppStateHoneycombReaderFactory.class);
73 readerFactoryBinder.addBinding().to(VppClassifierReaderFactory.class);
74 // Expose disabled interfaces in operational data
75 readerFactoryBinder.addBinding().to(DisabledInterfacesManager.ContextsReaderFactory.class);
76 // Expose vpp-classfier-context interfaces in operational data
77 readerFactoryBinder.addBinding().to(VppClassifierContextManagerImpl.ContextsReaderFactory.class);
80 final Multibinder<WriterFactory> writerFactoryBinder = Multibinder.newSetBinder(binder(), WriterFactory.class);
81 writerFactoryBinder.addBinding().to(InterfacesWriterFactory.class);
82 writerFactoryBinder.addBinding().to(VppHoneycombWriterFactory.class);
83 writerFactoryBinder.addBinding().to(VppClassifierHoneycombWriterFactory.class);
84 writerFactoryBinder.addBinding().to(AclWriterFactory.class);
87 final Multibinder<ManagedNotificationProducer> notifiersBinder =
88 Multibinder.newSetBinder(binder(), ManagedNotificationProducer.class);
89 notifiersBinder.addBinding().to(InterfaceChangeNotificationProducer.class);
90 LOG.info("Module V3PO successfully configured");