From 0b419f853ec86e4c89ed44db99bc438e9eb3a9e7 Mon Sep 17 00:00:00 2001 From: Hongjun Ni Date: Fri, 2 Sep 2016 22:18:43 +0800 Subject: HONEYCOMB-46: Add NSH_SFC Feature in Honeycomb Cherry pick to master PatchSet 9: Remove unused imports PatchSet 8: Fix interface DI broken PatchSet 7: Move VppNshModule to distribution PatchSet 2: Augment with encap-if-name for nsh-map Change-Id: Ia12afb72edfe804f26b84021b997d55db3129933 Signed-off-by: Hongjun Ni --- .../io/fd/honeycomb/vppnsh/impl/VppNshModule.java | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java (limited to 'nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java') diff --git a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java new file mode 100755 index 000000000..48f323394 --- /dev/null +++ b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2016 Intel 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.vppnsh.impl; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; + +import com.google.inject.AbstractModule; +import com.google.inject.Singleton; +import com.google.inject.multibindings.Multibinder; +import com.google.inject.name.Names; +import io.fd.honeycomb.data.init.DataTreeInitializer; +import io.fd.honeycomb.notification.ManagedNotificationProducer; +import io.fd.honeycomb.vppnsh.impl.cfgattrs.VppNshConfiguration; +import io.fd.honeycomb.vppnsh.impl.config.VppNshWriterFactory; +import io.fd.honeycomb.vppnsh.impl.oper.VppNshReaderFactory; +import io.fd.honeycomb.vppnsh.impl.init.VppNshInitializer; +import io.fd.honeycomb.vppnsh.impl.util.JVppNshProvider; +import io.fd.honeycomb.translate.read.ReaderFactory; +import io.fd.honeycomb.translate.v3po.util.NamingContext; +import io.fd.honeycomb.translate.write.WriterFactory; +import net.jmob.guice.conf.core.ConfigurationModule; +import org.openvpp.jvpp.nsh.future.FutureJVppNsh; + +/** + * This is some glue code necessary for Honeycomb distribution to pick up the plugin classes + */ +public final class VppNshModule extends AbstractModule { + + @Override + protected void configure() { + // These are plugin specific config attributes + install(ConfigurationModule.create()); + requestInjection(VppNshConfiguration.class); + + // Naming contexts + bind(NamingContext.class) + .annotatedWith(Names.named("nsh-entry-context")) + .toInstance(new NamingContext("nsh-entry-", "nsh-entry-context")); + + bind(NamingContext.class) + .annotatedWith(Names.named("nsh-map-context")) + .toInstance(new NamingContext("nsh-map-", "nsh-map-context")); + + // Bind to Plugin's JVPP. + bind(FutureJVppNsh.class).toProvider(JVppNshProvider.class).in(Singleton.class); + + // Below are classes picked up by HC framework + Multibinder.newSetBinder(binder(), WriterFactory.class).addBinding().to(VppNshWriterFactory.class); + Multibinder.newSetBinder(binder(), ReaderFactory.class).addBinding().to(VppNshReaderFactory.class); + Multibinder.newSetBinder(binder(), DataTreeInitializer.class).addBinding().to(VppNshInitializer.class); + } +} -- cgit 1.2.3-korg