summaryrefslogtreecommitdiffstats
path: root/vpp-api/java
diff options
context:
space:
mode:
Diffstat (limited to 'vpp-api/java')
-rw-r--r--vpp-api/java/Makefile.am116
-rw-r--r--vpp-api/java/Readme.txt236
-rw-r--r--vpp-api/java/configure.ac24
-rw-r--r--vpp-api/java/jvpp-common/jvpp_common.c65
-rw-r--r--vpp-api/java/jvpp-common/jvpp_common.h67
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java96
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java87
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java103
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java94
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java68
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java120
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java55
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java123
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java195
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/LispAdjacencyTest.java124
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java53
-rw-r--r--vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt17
-rw-r--r--vpp-api/java/jvpp-core/jvpp_core.c117
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java56
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java76
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java147
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java73
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java60
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java47
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java45
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java33
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java137
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java29
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java29
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java24
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.java34
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java58
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java24
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java23
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java24
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java25
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.java34
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java141
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java49
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java25
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java28
-rw-r--r--vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java44
-rw-r--r--vpp-api/java/jvpp-registry/jvpp_registry.c352
-rwxr-xr-xvpp-api/java/jvpp/gen/jvpp_gen.py171
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/__init__.py0
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/callback_gen.py105
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/dto_gen.py308
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jni_gen.py295
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py343
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jvpp_callback_facade_gen.py324
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jvpp_future_facade_gen.py331
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py219
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/notification_gen.py199
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/types_gen.py227
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/util.py220
-rw-r--r--vpp-api/java/m4/ax_check_java_home.m480
-rw-r--r--vpp-api/java/m4/ax_check_java_plugin.m4101
-rw-r--r--vpp-api/java/m4/ax_java_check_class.m485
-rw-r--r--vpp-api/java/m4/ax_java_options.m448
-rw-r--r--vpp-api/java/m4/ax_libgcj_jar.m483
-rw-r--r--vpp-api/java/m4/ax_prog_jar.m449
-rw-r--r--vpp-api/java/m4/ax_prog_java.m4115
-rw-r--r--vpp-api/java/m4/ax_prog_java_cc.m4104
-rw-r--r--vpp-api/java/m4/ax_prog_java_works.m4134
-rw-r--r--vpp-api/java/m4/ax_prog_javac.m479
-rw-r--r--vpp-api/java/m4/ax_prog_javac_works.m472
-rw-r--r--vpp-api/java/m4/ax_prog_javadoc.m450
-rw-r--r--vpp-api/java/m4/ax_prog_javah.m464
-rw-r--r--vpp-api/java/m4/ax_try_compile_java.m455
-rw-r--r--vpp-api/java/m4/ax_try_run_java.m456
70 files changed, 0 insertions, 7294 deletions
diff --git a/vpp-api/java/Makefile.am b/vpp-api/java/Makefile.am
deleted file mode 100644
index b055196510b..00000000000
--- a/vpp-api/java/Makefile.am
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright (c) 2015 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.
-
-AUTOMAKE_OPTIONS = foreign subdir-objects
-ACLOCAL_AMFLAGS = -I m4
-AM_CFLAGS = -Wall
-
-noinst_PROGRAMS =
-BUILT_SOURCES =
-bin_PROGRAMS =
-CLEANFILES =
-lib_LTLIBRARIES =
-
-#
-# jvpp-common
-#
-
-nobase_include_HEADERS = \
- jvpp-common/jvpp_common.h
-
-lib_LTLIBRARIES += libjvpp_common.la
-
-libjvpp_common_la_SOURCES = jvpp-common/jvpp_common.c
-libjvpp_common_la_LIBADD = -lvlibmemoryclient -lvlibapi -lsvm -lvppinfra \
- -lpthread -lm -lrt
-libjvpp_common_la_LDFLAGS = -module
-libjvpp_common_la_CPPFLAGS = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
-
-
-#
-# jvpp-registry (connection management + plugin registry)
-#
-lib_LTLIBRARIES += libjvpp_registry.la
-
-libjvpp_registry_la_SOURCES = jvpp-registry/jvpp_registry.c
-libjvpp_registry_la_LIBADD = -lvlibmemoryclient -lvlibapi -lsvm -lvppinfra \
- -lpthread -lm -lrt -ljvpp_common
-libjvpp_registry_la_LDFLAGS = -module
-libjvpp_registry_la_CPPFLAGS = -Ijvpp-registry -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
-EXTRA_libjvpp_registry_la_DEPENDENCIES=libjvpp_common.la
-
-jarfile_jvpp_registry = jvpp-registry-$(PACKAGE_VERSION).jar
-packagedir_jvpp_registry = io/fd/vpp/jvpp
-
-BUILT_SOURCES += jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h
-
-jvpp_registry_src_files := $(wildcard @srcdir@/jvpp-registry/$(packagedir_jvpp_registry)/*.java) $(wildcard @srcdir@/jvpp-registry/$(packagedir_jvpp_registry)/**/*.java)
-
-jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h: $(jvpp_registry_src_files)
- @echo " jvpp-registry.jar generation"
- mkdir -p jvpp-registry/target
- $(JAVAC) -d jvpp-registry/target $(jvpp_registry_src_files)
- $(JAVAH) -force -classpath jvpp-registry/target -d jvpp-registry io.fd.vpp.jvpp.VppJNIConnection
- $(JAVAH) -force -classpath jvpp-registry/target -d jvpp-registry io.fd.vpp.jvpp.JVppRegistryImpl
-
-$(jarfile_jvpp_registry): libjvpp_registry.la
- cp .libs/libjvpp_registry.so.0.0.0 jvpp-registry/target; \
- $(JAR) cf $(JARFLAGS) $@ -C jvpp-registry/target .;
-
-#
-# jvpp-core (Java wrapper for vpe.api)
-#
-lib_LTLIBRARIES += libjvpp_core.la
-
-libjvpp_core_la_SOURCES = jvpp-core/jvpp_core.c jvpp-core/jvpp_core_gen.h
-libjvpp_core_la_LIBADD = -lvlibmemoryclient -lvlibapi -lsvm -lvppinfra \
- -lpthread -lm -lrt -ljvpp_common
-libjvpp_core_la_LDFLAGS = -module
-libjvpp_core_la_CPPFLAGS = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
-
-jarfile_jvpp_core = jvpp-core-$(PACKAGE_VERSION).jar
-packagedir_jvpp_core = io/fd/vpp/jvpp/core
-
-BUILT_SOURCES += jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h
-
-JSON_FILES = \
- $(wildcard $(prefix)/../vpp/share/vpp/api/core/*.api.json)
-
-jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h: \
- jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h \
- $(JSON_FILES)
- cp -rf @srcdir@/jvpp-core/* -t jvpp-core/
- mkdir -p jvpp-core/target
- cd jvpp-core \
- && mkdir -p types dto future callfacade callback notification \
- && @srcdir@/jvpp/gen/jvpp_gen.py --plugin_name core \
- -i $(JSON_FILES) \
- && cp -rf types dto future callfacade callback notification *.java -t $(packagedir_jvpp_core) \
- && rm -rf types dto future callfacade callback notification *.java
-
- $(JAVAC) -classpath jvpp-registry/target -d jvpp-core/target jvpp-core/$(packagedir_jvpp_core)/*.java \
- jvpp-core/$(packagedir_jvpp_core)/types/*.java \
- jvpp-core/$(packagedir_jvpp_core)/dto/*.java \
- jvpp-core/$(packagedir_jvpp_core)/callback/*.java \
- jvpp-core/$(packagedir_jvpp_core)/notification/*.java \
- jvpp-core/$(packagedir_jvpp_core)/future/*.java \
- jvpp-core/$(packagedir_jvpp_core)/callfacade/*.java \
- jvpp-core/$(packagedir_jvpp_core)/test/*.java \
- || (echo "jvpp-core compilation failed: $$?"; exit 1)
- $(JAVAH) -force -classpath jvpp-registry/target:jvpp-core/target -d jvpp-core io.fd.vpp.jvpp.core.JVppCoreImpl
-
-$(jarfile_jvpp_core): libjvpp_core.la
- cp .libs/libjvpp_core.so.0.0.0 jvpp-core/target
- $(JAR) cf $(JARFLAGS) $@ -C jvpp-core/target .
-
-all-local: $(jarfile_jvpp_registry) $(jarfile_jvpp_core)
diff --git a/vpp-api/java/Readme.txt b/vpp-api/java/Readme.txt
deleted file mode 100644
index 689b9b37a46..00000000000
--- a/vpp-api/java/Readme.txt
+++ /dev/null
@@ -1,236 +0,0 @@
-= JVpp
-
-JVpp is JNI based Java API for VPP.
-
-== Features
-It is:
-
-* Asynchronous
-* Fully generated
-* Lightweight
-
-== Architecture
-
-=== Plugin support
-
- /-------------\ /--------------\ /---------------\
- | JvppPlugin1 +<-------+ JVppRegistry +--------->+ VppConnection |
- \-------------/ inits \--+-----------/ uses \---------------/
- |
- /-------------\ |
- | JvppPlugin2 +<----------+ inits
- \-------------/ |
- |
- ... |
- |
- /----------\ |
- | JVppCore +<-------------+
- \----------/
-
-
-VppRegistry opens connection to vpp (VppConnection) and manages jvpp plugins.
-Each plugin needs to be registered in the VppRegistry. Registration involves
-plugin initialization (providing JNI implementation with JVppCallback reference,
-vpp client identifier and vpp shared memory queue address).
-
-API user sends message by calling a method of appropriate plugin interface.
-The call is delegated to JNI implementation provided by the particular plugin.
-When JNI code receives reply, it invokes callback method of JVppCallback
-that corresponds to the received message reply.
-
-=== JVppCore as an example of JVpp plugin architecture
-
- JVpp Java
-
- /--------------\ /----------\ /------------\ /------\
- | JVppRegistry | | JVppCore | | Callbacks | | DTOs |
- \----+---------/ \----+-----/ \------+-----/ \------/
- ^ ^ ^
- | implements | implements | implements
- /----+--------------\ /---+----------\ /-----+---------\
- | JVppRegistryImpl* +-------->+ JVppCoreImpl | | JVppCallback |
- \-------+-----------/ inits \---+----------/ \-------+-------/
- | | ^
- | | uses | calls back
- | | |
-----------|--------------------------|-----------------------|---------------------
- | | |
- C JNI | +-------------------+ | /-----------------\
- v | | +-->+ jvpp_core_gen.h |
- /--------+--------\ | | | \-----------------/
- | jpp_registry.c* +---+ /--------+----+----\ | | |
- \-----------------/ | | << shared lib >> | /-+--+---+------\
- + ->+ jvpp_common* <--------+ jvpp_core.c* |
- uses \------------------/ uses \---------------/
-
-
-* Components marked with an asterisk contain manually crafted code, which in addition
-to generated classes form jvpp. Exception applies to Callbacks and DTOs, since there are
-manually crafted marker interfaces in callback and dto package (dto/JVppRequest, dto/JVppReply,
-dto/JVppDump, dto/JVppReplyDump, callback/JVppCallback)
-
-Note: jvpp_core.c calls back the JVppCallback instance with every response. An instance of the
-JVppCallback is provided to jvpp_core.c by JVppRegistryImpl on JVppCoreImpl initialization.
-
-Part of the JVpp is also Future facade. It is asynchronous API returning Future objects
-on top of low level JVpp. It wraps dump reply messages in one DTO using control_ping message
-(provided by JVppRegistry).
-
-
-Future facade
-
- /----------------\ /---------------\
- | FutureJVppCore | +-->+ JVppRegistry* |
- \-----+----------/ | \---------------/
- ^ |
- | implements | uses
- | |
- /--------+-------------\ | /------------------------------\
- | FutureJVppCoreFacade +---+--->+ FutureJVppCoreFacadeCallback |
- \---------+------------/ uses \-------+----------------------/
- | |
----------------|-----------------------------|-------------------------------
- | uses | implements
-JVpp Java | |
- | |
- /----------\ | |
- | JVppCore +<-+ |
- \----+-----/ |
- ^ |
- | implements v
- /----+---------\ /--------+---------------\
- | JVppCoreImpl | | JVppCoreGlobalCallback |
- \--------------/ \------------------------/
-
-
-
-Another useful utility of the JVpp is Callback facade. It is asynchronous API
-capable of calling specific callback instance (provided when performing a call)
-per call.
-
-
-Callback facade
-
- /------------------\ /---------------\
- | CallbackJVppCore | +-->+ JVppRegistry* |
- \-----+------------/ | \---------------/
- ^ |
- | implements | uses
- | |
- /--------+---------------\ | /--------------------------\
- | CallbackJVppCoreFacade +---+--->+ CallbackJVppCoreCallback |
- \---------+--------------/ uses \-----+--------------------/
- | |
----------------|-----------------------------|-------------------------------
- | uses | implements
-JVpp Java | |
- | |
- /----------\ | |
- | JVppCore +<-+ |
- \----+-----/ |
- ^ |
- | implements v
- /----+---------\ /----------+-------------\
- | JVppCoreImpl | | JVppCoreGlobalCallback |
- \--------------/ \------------------------/
-
-
-== Package structure
-
-* *io.fd.vpp.jvpp* - top level package for generated JVpp interface+ implementation and hand-crafted
-VppConnection interface + implementation - packaged as jvpp-registry-version.jar
-
-* *io.fd.vpp.jvpp.[plugin]* - top level package for generated JVpp interface + implementation
-+ plugin's API tests - packaged as jvpp-[plugin]-version.jar
-
-** *dto* - package for DTOs generated from VPP API structures + base/marker hand-crafted interfaces
-(in case of jvpp-registry)
-** *callback* - package for low-level JVpp callbacks and a global callback interface implementing each of
-the low-level JVppcallbacks
-** *future* - package for future based facade on top of JVpp and callbacks
-** *callfacade* - package for callback based facade on top of JVpp and callbacks. Allowing
-users to provide callback per request
-** *test* - package for JVpp standalone tests. Can also serve as samples for JVpp.
-
-C code is structured into modules:
-
-* *jvpp_common* - shared library that provides jvpp_main_t reference used by jvpp_registry and plugins.
-
-* *jvpp_registry* - native library used by JVppRegistryImpl, responsible for:
-
-** VPP connection open/close
-** Rx thread to java thread attach
-** control ping message handling
-
-* *jvpp_core* - native library used by jvpp core plugin:
-** *jvpp_core.c* - contains hand crafted code for core plugin initialization
-** *jvpp_core_gen.h* - contains generated JNI compatible handlers for all requests and replies defined in vpe.api
-
-== Code generators
-All of the required code except the base/marker interfaces is generated using
-simple python2 code generators. The generators use __defs_vpp_papi.py__ input
-file produced by __vppapigen__ from vpe.api file.
-
-=== JNI compatible C code
-Produces __jvpp_[plugin]_gen.h__ file containing JNI compatible handlers for each VPP
-request and reply.
-
-[NOTE]
-====
-Source: jvpp_c_gen.py
-====
-
-=== Request/Reply DTOs
-For all the structures in __defs_vpp_papi.py__ a POJO DTO is produced. Logically,
-there are 4 types of DTOs:
-
-* Request - requests that can be sent to VPP and only a single response is expected
-* DumpRequest - requests that can be sent to VPP and a stream of responses is expected
-* Reply - reply to a simple request or a single response from dump triggered response stream
-* ReplyDump - collection of replies from a single dump request
-* Notifications/Events - Not implemented yet
-
-[NOTE]
-====
-Source: dto_gen.py
-====
-
-=== JVpp
-Produces __JVpp.java__ and __JVppImpl.java__. This is the layer right above JNI compatible C
-code.
-
-[NOTE]
-====
-Source: jvpp_impl_gen.py
-====
-
-=== Callbacks
-Produces callback interface for each VPP reply + a global callback interface called
-__JVpp[plugin]GlobalCallback.java__ aggregating all of the callback interfaces. The JNI
-compatible C code expects only a single instance of this global callback and calls
-it with every reply.
-
-[NOTE]
-====
-Source: callback_gen.py
-====
-
-=== Future facade
-Produces an asynchronous facade on top of JVpp and callbacks, which returns a Future that provides
-matching reply once VPP invocation finishes. Sources produced:
-__FutureJVpp[plugin].java, FutureJVpp[plugin]Facade.java and FutureJVpp[plugin]Callback.java__
-
-[NOTE]
-====
-Source: jvpp_future_facade_gen.py
-====
-
-=== Callback facade
-Similar to future facade, only this facade takes callback objects as part of the invocation
-and the callback is called with result once VPP invocation finishes. Sources produced:
-__CallbackJVpp[plugin].java, CallbackJVpp[plugin]Facade.java and CallbackJVpp[plugin]Callback.java__
-
-[NOTE]
-====
-Source: jvpp_callback_facade_gen.py
-====
diff --git a/vpp-api/java/configure.ac b/vpp-api/java/configure.ac
deleted file mode 100644
index 3082781ec4d..00000000000
--- a/vpp-api/java/configure.ac
+++ /dev/null
@@ -1,24 +0,0 @@
-AC_INIT(jvpp, 17.04)
-LT_INIT
-AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE
-AM_SILENT_RULES([yes])
-
-AC_PROG_CC
-
-if test -f /usr/bin/lsb_release && test `lsb_release -si` == "Ubuntu" && test `lsb_release -sr` == "14.04" && test -d /usr/lib/jvm/java-8-openjdk-amd64/ ; then
- JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
- JAVAC=${JAVA_HOME}/bin/javac
- PATH=${JAVA_HOME}/bin/:${PATH}
- break
-fi
-
-AX_CHECK_JAVA_HOME
-AX_PROG_JAVAC
-AX_PROG_JAVAH
-AX_PROG_JAR
-AX_PROG_JAVADOC
-AX_PROG_JAVA
-
-AC_OUTPUT([Makefile])
-
diff --git a/vpp-api/java/jvpp-common/jvpp_common.c b/vpp-api/java/jvpp-common/jvpp_common.c
deleted file mode 100644
index a161c09c95b..00000000000
--- a/vpp-api/java/jvpp-common/jvpp_common.c
+++ /dev/null
@@ -1,65 +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.
- */
-#define _GNU_SOURCE /* for strcasestr(3) */
-
-#include "jvpp_common.h"
-
-#ifndef JVPP_DEBUG
-#define JVPP_DEBUG 0
-#endif
-
-#if JVPP_DEBUG == 1
-#define DEBUG_LOG(...) clib_warning(__VA_ARGS__)
-#else
-#define DEBUG_LOG(...)
-#endif
-
-/* shared jvpp main structure */
-jvpp_main_t jvpp_main __attribute__((aligned (64)));
-
-void call_on_error(const char* callName, int contextId, int retval,
- jclass callbackClass, jobject callbackObject,
- jclass callbackExceptionClass) {
- DEBUG_LOG("\nCallOnError : callback=%s, retval=%d, context=%d\n", callName,
- clib_net_to_host_u32(retval), clib_net_to_host_u32(context));
- JNIEnv *env = jvpp_main.jenv;
- if (!callbackClass) {
- DEBUG_LOG("CallOnError : jm->callbackClass is null!\n");
- return;
- }
- jmethodID excConstructor = (*env)->GetMethodID(env, callbackExceptionClass,
- "<init>", "(Ljava/lang/String;II)V");
- if (!excConstructor) {
- DEBUG_LOG("CallOnError : excConstructor is null!\n");
- return;
- }
- jmethodID callbackExcMethod = (*env)->GetMethodID(env, callbackClass,
- "onError", "(Lio/fd/vpp/jvpp/VppCallbackException;)V");
- if (!callbackExcMethod) {
- DEBUG_LOG("CallOnError : callbackExcMethod is null!\n");
- return;
- }
-
- jobject excObject = (*env)->NewObject(env, callbackExceptionClass,
- excConstructor, (*env)->NewStringUTF(env, callName),
- clib_net_to_host_u32(contextId), clib_net_to_host_u32(retval));
- if (!excObject) {
- DEBUG_LOG("CallOnError : excObject is null!\n");
- return;
- }
-
- (*env)->CallVoidMethod(env, callbackObject, callbackExcMethod, excObject);
- DEBUG_LOG("CallOnError : Response sent\n");
-}
diff --git a/vpp-api/java/jvpp-common/jvpp_common.h b/vpp-api/java/jvpp-common/jvpp_common.h
deleted file mode 100644
index bbb203edcb4..00000000000
--- a/vpp-api/java/jvpp-common/jvpp_common.h
+++ /dev/null
@@ -1,67 +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.
- */
-#ifndef __included_jvpp_common_h__
-#define __included_jvpp_common_h__
-//
-#include <vppinfra/types.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-#include <jni.h>
-
-typedef struct {
- /* Unique identifier used for matching replays with requests */
- volatile u32 context_id;
-
- /* Spinlock */
- volatile u32 lock;
- u32 tag;
-
- /* JNI Native Method Interface pointer for message handlers */
- JNIEnv *jenv;
-
- /* JNI Invoke Interface pointer for attachment of rx thread to java thread */
- JavaVM *jvm;
-
- /* Convenience */
- unix_shared_memory_queue_t * vl_input_queue;
- u32 my_client_index;
-} jvpp_main_t;
-
-extern jvpp_main_t jvpp_main __attribute__((aligned (64)));
-
-static_always_inline u32 vppjni_get_context_id(jvpp_main_t * jm) {
- return __sync_add_and_fetch(&jm->context_id, 1);
-}
-
-static_always_inline void vppjni_lock(jvpp_main_t * jm, u32 tag) {
- while (__sync_lock_test_and_set(&jm->lock, 1))
- ;
- jm->tag = tag;
-}
-
-static_always_inline void vppjni_unlock(jvpp_main_t * jm) {
- jm->tag = 0;
- CLIB_MEMORY_BARRIER();
- jm->lock = 0;
-}
-
-/**
- * Calls onError callback on callbackObject reference. Passes instance of callbackExceptionClass as parameter.
- */
-void call_on_error(const char* callName, int contextId, int retval,
- jclass callbackClass, jobject callbackObject,
- jclass callbackExceptionClass);
-
-#endif /* __included_jvpp_common_h__ */
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java
deleted file mode 100644
index 986993b854f..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java
+++ /dev/null
@@ -1,96 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVpp;
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.VppCallbackException;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.callback.GetNodeIndexCallback;
-import io.fd.vpp.jvpp.core.callback.ShowVersionCallback;
-import io.fd.vpp.jvpp.core.callback.SwInterfaceCallback;
-import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
-import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
-import io.fd.vpp.jvpp.core.dto.ShowVersion;
-import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDetails;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
-
-public class CallbackApiTest {
-
- public static void main(String[] args) throws Exception {
- testCallbackApi();
- }
-
- private static void testCallbackApi() throws Exception {
- System.out.println("Testing Java callback API with JVppRegistry");
- try (final JVppRegistry registry = new JVppRegistryImpl("CallbackApiTest");
- final JVpp jvpp = new JVppCoreImpl()) {
- registry.register(jvpp, new TestCallback());
-
- System.out.println("Sending ShowVersion request...");
- final int result = jvpp.send(new ShowVersion());
- System.out.printf("ShowVersion send result = %d%n", result);
-
- System.out.println("Sending GetNodeIndex request...");
- GetNodeIndex getNodeIndexRequest = new GetNodeIndex();
- getNodeIndexRequest.nodeName = "non-existing-node".getBytes();
- jvpp.send(getNodeIndexRequest);
-
- System.out.println("Sending SwInterfaceDump request...");
- SwInterfaceDump swInterfaceDumpRequest = new SwInterfaceDump();
- swInterfaceDumpRequest.nameFilterValid = 0;
- swInterfaceDumpRequest.nameFilter = "".getBytes();
- jvpp.send(swInterfaceDumpRequest);
-
- Thread.sleep(1000);
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- static class TestCallback implements GetNodeIndexCallback, ShowVersionCallback, SwInterfaceCallback {
-
- @Override
- public void onGetNodeIndexReply(final GetNodeIndexReply msg) {
- System.out.printf("Received GetNodeIndexReply: %s%n", msg);
- }
-
- @Override
- public void onShowVersionReply(final ShowVersionReply msg) {
- System.out.printf("Received ShowVersionReply: context=%d, program=%s, version=%s, "
- + "buildDate=%s, buildDirectory=%s%n",
- msg.context, new String(msg.program), new String(msg.version),
- new String(msg.buildDate), new String(msg.buildDirectory));
- }
-
- @Override
- public void onSwInterfaceDetails(final SwInterfaceDetails msg) {
- System.out.printf("Received SwInterfaceDetails: interfaceName=%s, l2AddressLength=%d, adminUpDown=%d, "
- + "linkUpDown=%d, linkSpeed=%d, linkMtu=%d%n",
- new String(msg.interfaceName), msg.l2AddressLength, msg.adminUpDown,
- msg.linkUpDown, msg.linkSpeed, (int) msg.linkMtu);
- }
-
- @Override
- public void onError(VppCallbackException ex) {
- System.out.printf("Received onError exception: call=%s, context=%d, retval=%d%n", ex.getMethodName(),
- ex.getCtxId(), ex.getErrorCode());
- }
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
deleted file mode 100644
index d84cb034ef1..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
+++ /dev/null
@@ -1,87 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.VppCallbackException;
-import io.fd.vpp.jvpp.core.JVppCore;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.callback.WantInterfaceEventsCallback;
-import io.fd.vpp.jvpp.core.callfacade.CallbackJVppCoreFacade;
-import io.fd.vpp.jvpp.core.dto.WantInterfaceEventsReply;
-
-public class CallbackJVppFacadeNotificationTest {
-
- private static void testCallbackFacade() throws Exception {
- System.out.println("Testing CallbackJVppFacade for notifications");
-
- try (final JVppRegistry registry = new JVppRegistryImpl("CallbackFacadeTest");
- final JVppCore jvpp = new JVppCoreImpl()) {
- final CallbackJVppCoreFacade jvppCallbackFacade = new CallbackJVppCoreFacade(registry, jvpp);
- System.out.println("Successfully connected to VPP");
-
- final AutoCloseable notificationListenerReg =
- jvppCallbackFacade.getNotificationRegistry().registerSwInterfaceSetFlagsNotificationCallback(
- NotificationUtils::printNotification
- );
-
- jvppCallbackFacade.wantInterfaceEvents(NotificationUtils.getEnableInterfaceNotificationsReq(),
- new WantInterfaceEventsCallback() {
- @Override
- public void onWantInterfaceEventsReply(final WantInterfaceEventsReply reply) {
- System.out.println("Interface events started");
- }
-
- @Override
- public void onError(final VppCallbackException ex) {
- System.out.printf("Received onError exception: call=%s, context=%d, retval=%d%n",
- ex.getMethodName(), ex.getCtxId(), ex.getErrorCode());
- }
- });
-
- System.out.println("Changing interface configuration");
- NotificationUtils.getChangeInterfaceState().send(jvpp);
-
- Thread.sleep(1000);
-
- jvppCallbackFacade.wantInterfaceEvents(NotificationUtils.getDisableInterfaceNotificationsReq(),
- new WantInterfaceEventsCallback() {
- @Override
- public void onWantInterfaceEventsReply(final WantInterfaceEventsReply reply) {
- System.out.println("Interface events stopped");
- }
-
- @Override
- public void onError(final VppCallbackException ex) {
- System.out.printf("Received onError exception: call=%s, context=%d, retval=%d%n",
- ex.getMethodName(), ex.getCtxId(), ex.getErrorCode());
- }
- });
-
- notificationListenerReg.close();
-
- Thread.sleep(2000);
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- public static void main(String[] args) throws Exception {
- testCallbackFacade();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java
deleted file mode 100644
index 9f7cb8deadc..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java
+++ /dev/null
@@ -1,103 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.VppCallbackException;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.callback.GetNodeIndexCallback;
-import io.fd.vpp.jvpp.core.callback.ShowVersionCallback;
-import io.fd.vpp.jvpp.core.callfacade.CallbackJVppCoreFacade;
-import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
-import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
-import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
-
-/**
- * CallbackJVppFacade together with CallbackJVppFacadeCallback allow for setting different callback for each request.
- * This is more convenient than the approach shown in CallbackApiTest.
- */
-public class CallbackJVppFacadeTest {
-
- private static ShowVersionCallback showVersionCallback1 = new ShowVersionCallback() {
- @Override
- public void onShowVersionReply(final ShowVersionReply msg) {
- System.out.printf("ShowVersionCallback1 received ShowVersionReply: context=%d, program=%s,"
- + "version=%s, buildDate=%s, buildDirectory=%s%n", msg.context, new String(msg.program),
- new String(msg.version), new String(msg.buildDate), new String(msg.buildDirectory));
- }
-
- @Override
- public void onError(VppCallbackException ex) {
- System.out.printf("Received onError exception in showVersionCallback1: call=%s, reply=%d, context=%d%n",
- ex.getMethodName(), ex.getErrorCode(), ex.getCtxId());
- }
- };
-
- private static ShowVersionCallback showVersionCallback2 = new ShowVersionCallback() {
- @Override
- public void onShowVersionReply(final ShowVersionReply msg) {
- System.out.printf("ShowVersionCallback2 received ShowVersionReply: context=%d, program=%s,"
- + "version=%s, buildDate=%s, buildDirectory=%s%n", msg.context, new String(msg.program),
- new String(msg.version), new String(msg.buildDate), new String(msg.buildDirectory));
- }
-
- @Override
- public void onError(VppCallbackException ex) {
- System.out.printf("Received onError exception in showVersionCallback2: call=%s, reply=%d, context=%d%n",
- ex.getMethodName(), ex.getErrorCode(), ex.getCtxId());
- }
-
- };
-
- private static GetNodeIndexCallback getNodeIndexCallback = new GetNodeIndexCallback() {
- @Override
- public void onGetNodeIndexReply(final GetNodeIndexReply msg) {
- System.out.printf("Received GetNodeIndexReply: %s%n", msg);
- }
-
- @Override
- public void onError(VppCallbackException ex) {
- System.out.printf("Received onError exception in getNodeIndexCallback: call=%s, reply=%d, context=%d%n",
- ex.getMethodName(), ex.getErrorCode(), ex.getCtxId());
- }
- };
-
- private static void testCallbackFacade() throws Exception {
- System.out.println("Testing CallbackJVppFacade");
-
- try (final JVppRegistry registry = new JVppRegistryImpl("CallbackFacadeTest");
- final CallbackJVppCoreFacade callbackFacade = new CallbackJVppCoreFacade(registry, new JVppCoreImpl())) {
- System.out.println("Successfully connected to VPP");
-
- callbackFacade.showVersion(showVersionCallback1);
- callbackFacade.showVersion(showVersionCallback2);
-
- GetNodeIndex getNodeIndexRequest = new GetNodeIndex();
- getNodeIndexRequest.nodeName = "dummyNode".getBytes();
- callbackFacade.getNodeIndex(getNodeIndexRequest, getNodeIndexCallback);
-
- Thread.sleep(2000);
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- public static void main(String[] args) throws Exception {
- testCallbackFacade();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java
deleted file mode 100644
index a9f71f11b00..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java
+++ /dev/null
@@ -1,94 +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.vpp.jvpp.core.test;
-
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.getChangeInterfaceState;
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.getDisableInterfaceNotificationsReq;
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.getEnableInterfaceNotificationsReq;
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.printNotification;
-
-import io.fd.vpp.jvpp.JVpp;
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.VppCallbackException;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.callback.SwInterfaceSetFlagsCallback;
-import io.fd.vpp.jvpp.core.callback.SwInterfaceSetFlagsNotificationCallback;
-import io.fd.vpp.jvpp.core.callback.WantInterfaceEventsCallback;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlagsNotification;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlagsReply;
-import io.fd.vpp.jvpp.core.dto.WantInterfaceEventsReply;
-
-public class CallbackNotificationApiTest {
-
- private static void testCallbackApi() throws Exception {
- System.out.println("Testing Java callback API for notifications");
- try (final JVppRegistry registry = new JVppRegistryImpl("CallbackNotificationTest");
- final JVpp jvpp = new JVppCoreImpl()) {
- registry.register(jvpp, new TestCallback());
- System.out.println("Successfully connected to VPP");
-
- getEnableInterfaceNotificationsReq().send(jvpp);
- System.out.println("Interface notifications started");
- // TODO test ifc dump which also triggers interface flags send
-
- System.out.println("Changing interface configuration");
- getChangeInterfaceState().send(jvpp);
-
- // Notifications are received
- Thread.sleep(500);
-
- getDisableInterfaceNotificationsReq().send(jvpp);
- System.out.println("Interface events stopped");
-
- Thread.sleep(2000);
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- public static void main(String[] args) throws Exception {
- testCallbackApi();
- }
-
- private static class TestCallback implements SwInterfaceSetFlagsNotificationCallback,
- WantInterfaceEventsCallback, SwInterfaceSetFlagsCallback {
-
- @Override
- public void onSwInterfaceSetFlagsNotification(
- final SwInterfaceSetFlagsNotification msg) {
- printNotification(msg);
- }
-
- @Override
- public void onWantInterfaceEventsReply(final WantInterfaceEventsReply wantInterfaceEventsReply) {
- System.out.println("Interface notification stream updated");
- }
-
- @Override
- public void onSwInterfaceSetFlagsReply(final SwInterfaceSetFlagsReply swInterfaceSetFlagsReply) {
- System.out.println("Interface flags set successfully");
- }
-
- @Override
- public void onError(VppCallbackException ex) {
- System.out.printf("Received onError exception in getNodeIndexCallback: call=%s, reply=%d, context=%d%n",
- ex.getMethodName(), ex.getErrorCode(), ex.getCtxId());
-
- }
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java
deleted file mode 100644
index e97f4e3ac9a..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java
+++ /dev/null
@@ -1,68 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVpp;
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.VppCallbackException;
-import io.fd.vpp.jvpp.callback.ControlPingCallback;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.dto.ControlPing;
-import io.fd.vpp.jvpp.dto.ControlPingReply;
-
-public class ControlPingTest {
-
- private static void testControlPing() throws Exception {
- System.out.println("Testing ControlPing using Java callback API");
- try (JVppRegistry registry = new JVppRegistryImpl("ControlPingTest");
- JVpp jvpp = new JVppCoreImpl()) {
-
- registry.register(jvpp, new ControlPingCallback() {
- @Override
- public void onControlPingReply(final ControlPingReply reply) {
- System.out.printf("Received ControlPingReply: %s%n", reply);
- }
-
- @Override
- public void onError(VppCallbackException ex) {
- System.out.printf("Received onError exception: call=%s, reply=%d, context=%d ", ex.getMethodName(),
- ex.getErrorCode(), ex.getCtxId());
- }
-
- });
- System.out.println("Successfully connected to VPP");
- Thread.sleep(1000);
-
- System.out.println("Sending control ping using JVppRegistry");
- registry.controlPing(jvpp.getClass());
-
- Thread.sleep(2000);
-
- System.out.println("Sending control ping using JVpp plugin");
- jvpp.send(new ControlPing());
-
- Thread.sleep(2000);
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- public static void main(String[] args) throws Exception {
- testControlPing();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java
deleted file mode 100644
index a96258f4302..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java
+++ /dev/null
@@ -1,120 +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.vpp.jvpp.core.test;
-
-import static java.util.Objects.requireNonNull;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.dto.CreateSubif;
-import io.fd.vpp.jvpp.core.dto.CreateSubifReply;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
-import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
-
-/**
- * <p>Tests sub-interface creation.<br> Equivalent to:<br>
- *
- * <pre>{@code
- * vppctl create sub GigabitEthernet0/9/0 1 dot1q 100 inner-dot1q any
- * }
- * </pre>
- *
- * To verify invoke:<br>
- * <pre>{@code
- * vpp_api_test json
- * vat# sw_interface_dump
- * }
- */
-public class CreateSubInterfaceTest {
-
- private static SwInterfaceDump createSwInterfaceDumpRequest(final String ifaceName) {
- SwInterfaceDump request = new SwInterfaceDump();
- request.nameFilter = ifaceName.getBytes();
- request.nameFilterValid = 1;
- return request;
- }
-
- private static void requireSingleIface(final SwInterfaceDetailsReplyDump response, final String ifaceName) {
- if (response.swInterfaceDetails.size() != 1) {
- throw new IllegalStateException(
- String.format("Expected one interface matching filter %s but was %d", ifaceName,
- response.swInterfaceDetails.size()));
- }
- }
-
- private static CreateSubif createSubifRequest(final int swIfIndex, final int subId) {
- CreateSubif request = new CreateSubif();
- request.swIfIndex = swIfIndex; // super interface id
- request.subId = subId;
- request.noTags = 0;
- request.oneTag = 0;
- request.twoTags = 1;
- request.dot1Ad = 0;
- request.exactMatch = 1;
- request.defaultSub = 0;
- request.outerVlanIdAny = 0;
- request.innerVlanIdAny = 1;
- request.outerVlanId = 100;
- request.innerVlanId = 0;
- return request;
- }
-
- private static void print(CreateSubifReply reply) {
- System.out.printf("CreateSubifReply: %s%n", reply);
- }
-
- private static void testCreateSubInterface() throws Exception {
- System.out.println("Testing sub-interface creation using Java callback API");
- try (final JVppRegistry registry = new JVppRegistryImpl("CreateSubInterface");
- final FutureJVppCoreFacade jvppFacade = new FutureJVppCoreFacade(registry, new JVppCoreImpl())) {
- System.out.println("Successfully connected to VPP");
- Thread.sleep(1000);
-
- final String ifaceName = "GigabitEthernet0/8/0";
-
- final SwInterfaceDetailsReplyDump swInterfaceDetails =
- jvppFacade.swInterfaceDump(createSwInterfaceDumpRequest(ifaceName)).toCompletableFuture().get();
-
- requireNonNull(swInterfaceDetails, "swInterfaceDump returned null");
- requireNonNull(swInterfaceDetails.swInterfaceDetails, "swInterfaceDetails is null");
- requireSingleIface(swInterfaceDetails, ifaceName);
-
- final int swIfIndex = swInterfaceDetails.swInterfaceDetails.get(0).swIfIndex;
- final int subId = 1;
-
- final CreateSubifReply createSubifReply =
- jvppFacade.createSubif(createSubifRequest(swIfIndex, subId)).toCompletableFuture().get();
- print(createSubifReply);
-
- final String subIfaceName = "GigabitEthernet0/8/0." + subId;
- final SwInterfaceDetailsReplyDump subIface =
- jvppFacade.swInterfaceDump(createSwInterfaceDumpRequest(subIfaceName)).toCompletableFuture().get();
- requireNonNull(swInterfaceDetails, "swInterfaceDump returned null");
- requireNonNull(subIface.swInterfaceDetails, "swInterfaceDump returned null");
- requireSingleIface(swInterfaceDetails, ifaceName);
-
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- public static void main(String[] args) throws Exception {
- testCreateSubInterface();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java
deleted file mode 100644
index 9efeae19f8b..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java
+++ /dev/null
@@ -1,55 +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.vpp.jvpp.core.test;
-
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.getChangeInterfaceState;
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.getDisableInterfaceNotificationsReq;
-import static io.fd.vpp.jvpp.core.test.NotificationUtils.getEnableInterfaceNotificationsReq;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
-
-public class FutureApiNotificationTest {
-
- private static void testFutureApi() throws Exception {
- System.out.println("Testing Java future API for notifications");
- try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiNotificationTest");
- final FutureJVppCoreFacade jvppFacade = new FutureJVppCoreFacade(registry, new JVppCoreImpl());
- final AutoCloseable notificationListenerReg =
- jvppFacade.getNotificationRegistry()
- .registerSwInterfaceSetFlagsNotificationCallback(NotificationUtils::printNotification)) {
- System.out.println("Successfully connected to VPP");
- jvppFacade.wantInterfaceEvents(getEnableInterfaceNotificationsReq()).toCompletableFuture().get();
- System.out.println("Interface events started");
-
- System.out.println("Changing interface configuration");
- jvppFacade.swInterfaceSetFlags(getChangeInterfaceState()).toCompletableFuture().get();
-
- Thread.sleep(1000);
-
- jvppFacade.wantInterfaceEvents(getDisableInterfaceNotificationsReq()).toCompletableFuture().get();
- System.out.println("Interface events stopped");
- System.out.println("Disconnecting...");
- }
- }
-
- public static void main(String[] args) throws Exception {
- testFutureApi();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java
deleted file mode 100644
index f478bab442f..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java
+++ /dev/null
@@ -1,123 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.dto.BridgeDomainDetailsReplyDump;
-import io.fd.vpp.jvpp.core.dto.BridgeDomainDump;
-import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
-import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
-import io.fd.vpp.jvpp.core.dto.ShowVersion;
-import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDetails;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
-import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
-import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Future;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public class FutureApiTest {
-
- private static final Logger LOG = Logger.getLogger(FutureApiTest.class.getName());
-
- private static void testShowVersion(final FutureJVppCoreFacade jvpp) throws Exception {
- LOG.info("Sending ShowVersion request...");
- final Future<ShowVersionReply> replyFuture = jvpp.showVersion(new ShowVersion()).toCompletableFuture();
- final ShowVersionReply reply = replyFuture.get();
- LOG.info(
- String.format(
- "Received ShowVersionReply: context=%d, program=%s, version=%s, buildDate=%s, buildDirectory=%s%n",
- reply.context, new String(reply.program), new String(reply.version), new String(reply.buildDate),
- new String(reply.buildDirectory)));
- }
-
- private static void testEmptyBridgeDomainDump(final FutureJVppCoreFacade jvpp) throws Exception {
- LOG.info("Sending ShowVersion request...");
- final BridgeDomainDump request = new BridgeDomainDump();
- request.bdId = -1; // dump call
-
- final CompletableFuture<BridgeDomainDetailsReplyDump>
- replyFuture = jvpp.bridgeDomainDump(request).toCompletableFuture();
- final BridgeDomainDetailsReplyDump reply = replyFuture.get();
-
- if (reply == null || reply.bridgeDomainDetails == null) {
- LOG.severe("Received null response for empty dump: " + reply);
- } else {
- LOG.info(
- String.format(
- "Received empty bridge-domain dump reply with list of bridge-domains: %s, %s",
- reply.bridgeDomainDetails, reply.bridgeDomainSwIfDetails));
- }
- }
-
- private static void testGetNodeIndex(final FutureJVppCoreFacade jvpp) {
- LOG.info("Sending GetNodeIndex request...");
- final GetNodeIndex request = new GetNodeIndex();
- request.nodeName = "non-existing-node".getBytes();
- final Future<GetNodeIndexReply> replyFuture = jvpp.getNodeIndex(request).toCompletableFuture();
- try {
- final GetNodeIndexReply reply = replyFuture.get();
- LOG.info(
- String.format(
- "Received GetNodeIndexReply: context=%d, nodeIndex=%d%n", reply.context, reply.nodeIndex));
- } catch (Exception e) {
- LOG.log(Level.SEVERE, "GetNodeIndex request failed", e);
- }
- }
-
- private static void testSwInterfaceDump(final FutureJVppCoreFacade jvpp) throws Exception {
- LOG.info("Sending SwInterfaceDump request...");
- final SwInterfaceDump request = new SwInterfaceDump();
- request.nameFilterValid = 0;
- request.nameFilter = "".getBytes();
-
- final Future<SwInterfaceDetailsReplyDump> replyFuture = jvpp.swInterfaceDump(request).toCompletableFuture();
- final SwInterfaceDetailsReplyDump reply = replyFuture.get();
- for (SwInterfaceDetails details : reply.swInterfaceDetails) {
- Objects.requireNonNull(details, "reply.swInterfaceDetails contains null element!");
- LOG.info(
- String.format("Received SwInterfaceDetails: interfaceName=%s, l2AddressLength=%d, adminUpDown=%d, "
- + "linkUpDown=%d, linkSpeed=%d, linkMtu=%d%n",
- new String(details.interfaceName), details.l2AddressLength, details.adminUpDown,
- details.linkUpDown, details.linkSpeed, (int) details.linkMtu));
- }
- }
-
- private static void testFutureApi() throws Exception {
- LOG.info("Testing Java future API");
- try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest");
- final FutureJVppCoreFacade jvppFacade = new FutureJVppCoreFacade(registry, new JVppCoreImpl())) {
- LOG.info("Successfully connected to VPP");
-
- testEmptyBridgeDomainDump(jvppFacade);
- testShowVersion(jvppFacade);
- testGetNodeIndex(jvppFacade);
- testSwInterfaceDump(jvppFacade);
-
- LOG.info("Disconnecting...");
- }
- }
-
- public static void main(String[] args) throws Exception {
- testFutureApi();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java
deleted file mode 100644
index 6b3fa993f4d..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java
+++ /dev/null
@@ -1,195 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelSession;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelSessionReply;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelTable;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelTableReply;
-import io.fd.vpp.jvpp.core.dto.ClassifySessionDetailsReplyDump;
-import io.fd.vpp.jvpp.core.dto.ClassifySessionDump;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableByInterface;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableByInterfaceReply;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableIds;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableIdsReply;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableInfo;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableInfoReply;
-import io.fd.vpp.jvpp.core.dto.InputAclSetInterface;
-import io.fd.vpp.jvpp.core.dto.InputAclSetInterfaceReply;
-import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
-import javax.xml.bind.DatatypeConverter;
-
-/**
- * <p>Tests L2 ACL creation and read.<br> Equivalent to the following vppctl commands:<br>
- *
- * <pre>{@code
- * vppctl classify table mask l2 src
- * vppctl classify session acl-hit-next deny opaque-index 0 table-index 0 match l2 src 01:02:03:04:05:06
- * vppctl set int input acl intfc local0 l2-table 0
- * vppctl sh class table verbose
- * }
- * </pre>
- */
-public class L2AclTest {
-
- private static final int LOCAL0_IFACE_ID = 0;
-
- private static ClassifyAddDelTable createClassifyTable() {
- ClassifyAddDelTable request = new ClassifyAddDelTable();
- request.isAdd = 1;
- request.tableIndex = ~0; // default
- request.nbuckets = 2;
- request.memorySize = 2 << 20;
- request.nextTableIndex = ~0; // default
- request.missNextIndex = ~0; // default
- request.skipNVectors = 0;
- request.matchNVectors = 1;
- request.mask =
- new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
- (byte) 0xff, (byte) 0xff, 0x00, 0x00, 0x00, 0x00};
- return request;
- }
-
- private static ClassifyTableInfo createClassifyTableInfoRequest(final int tableId) {
- ClassifyTableInfo request = new ClassifyTableInfo();
- request.tableId = tableId;
- return request;
- }
-
- private static ClassifyAddDelSession createClassifySession(final int tableIndex) {
- ClassifyAddDelSession request = new ClassifyAddDelSession();
- request.isAdd = 1;
- request.tableIndex = tableIndex;
- request.hitNextIndex = 0; // deny
- request.opaqueIndex = 0;
- request.advance = 0; // default
- // match 01:02:03:04:05:06 mac address
- request.match =
- new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04,
- (byte) 0x05, (byte) 0x06, 0x00, 0x00, 0x00, 0x00};
- return request;
- }
-
- private static ClassifySessionDump createClassifySessionDumpRequest(final int newTableIndex) {
- ClassifySessionDump request = new ClassifySessionDump();
- request.tableId = newTableIndex;
- return request;
- }
-
- private static InputAclSetInterface aclSetInterface() {
- InputAclSetInterface request = new InputAclSetInterface();
- request.isAdd = 1;
- request.swIfIndex = LOCAL0_IFACE_ID;
- request.ip4TableIndex = ~0; // skip
- request.ip6TableIndex = ~0; // skip
- request.l2TableIndex = 0;
- return request;
- }
-
- private static ClassifyTableByInterface createClassifyTableByInterfaceRequest() {
- ClassifyTableByInterface request = new ClassifyTableByInterface();
- request.swIfIndex = LOCAL0_IFACE_ID;
- return request;
- }
-
- private static void print(ClassifyAddDelTableReply reply) {
- System.out.printf("ClassifyAddDelTableReply: %s%n", reply);
- }
-
- private static void print(ClassifyTableIdsReply reply) {
- System.out.printf("ClassifyTableIdsReply: %s%n", reply);
- }
-
- private static void print(final ClassifyTableInfoReply reply) {
- System.out.println(reply);
- if (reply != null) {
- System.out.println("Mask hex: " + DatatypeConverter.printHexBinary(reply.mask));
- }
- }
-
- private static void print(ClassifyAddDelSessionReply reply) {
- System.out.printf("ClassifyAddDelSessionReply: context=%s%n", reply);
- }
-
- private static void print(final ClassifySessionDetailsReplyDump reply) {
- System.out.println(reply);
- reply.classifySessionDetails.forEach(detail -> {
- System.out.println(detail);
- System.out.println("Match hex: " + DatatypeConverter.printHexBinary(detail.match));
- });
- }
-
- private static void print(final InputAclSetInterfaceReply reply) {
- System.out.printf("InputAclSetInterfaceReply: context=%s%n", reply);
- }
-
- private static void print(final ClassifyTableByInterfaceReply reply) {
- System.out.printf("ClassifyAddDelTableReply: %s%n", reply);
- }
-
- private static void testL2Acl() throws Exception {
- System.out.println("Testing L2 ACLs using Java callback API");
- try (final JVppRegistry registry = new JVppRegistryImpl("L2AclTest");
- final FutureJVppCoreFacade jvppFacade = new FutureJVppCoreFacade(registry, new JVppCoreImpl())) {
-
- System.out.println("Successfully connected to VPP");
- Thread.sleep(1000);
-
- final ClassifyAddDelTableReply classifyAddDelTableReply =
- jvppFacade.classifyAddDelTable(createClassifyTable()).toCompletableFuture().get();
- print(classifyAddDelTableReply);
-
- final ClassifyTableIdsReply classifyTableIdsReply =
- jvppFacade.classifyTableIds(new ClassifyTableIds()).toCompletableFuture().get();
- print(classifyTableIdsReply);
-
- final ClassifyTableInfoReply classifyTableInfoReply =
- jvppFacade.classifyTableInfo(createClassifyTableInfoRequest(classifyAddDelTableReply.newTableIndex))
- .toCompletableFuture().get();
- print(classifyTableInfoReply);
-
- final ClassifyAddDelSessionReply classifyAddDelSessionReply =
- jvppFacade.classifyAddDelSession(createClassifySession(classifyAddDelTableReply.newTableIndex))
- .toCompletableFuture().get();
- print(classifyAddDelSessionReply);
-
- final ClassifySessionDetailsReplyDump classifySessionDetailsReplyDump =
- jvppFacade.classifySessionDump(createClassifySessionDumpRequest(classifyAddDelTableReply.newTableIndex))
- .toCompletableFuture().get();
- print(classifySessionDetailsReplyDump);
-
- final InputAclSetInterfaceReply inputAclSetInterfaceReply =
- jvppFacade.inputAclSetInterface(aclSetInterface()).toCompletableFuture().get();
- print(inputAclSetInterfaceReply);
-
- final ClassifyTableByInterfaceReply classifyTableByInterfaceReply =
- jvppFacade.classifyTableByInterface(createClassifyTableByInterfaceRequest()).toCompletableFuture()
- .get();
- print(classifyTableByInterfaceReply);
-
- System.out.println("Disconnecting...");
- }
- Thread.sleep(1000);
- }
-
- public static void main(String[] args) throws Exception {
- testL2Acl();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/LispAdjacencyTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/LispAdjacencyTest.java
deleted file mode 100644
index d7f5039b152..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/LispAdjacencyTest.java
+++ /dev/null
@@ -1,124 +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.vpp.jvpp.core.test;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-import io.fd.vpp.jvpp.core.JVppCoreImpl;
-import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacency;
-import io.fd.vpp.jvpp.core.dto.LispAddDelLocalEid;
-import io.fd.vpp.jvpp.core.dto.LispAddDelLocatorSet;
-import io.fd.vpp.jvpp.core.dto.LispAddDelRemoteMapping;
-import io.fd.vpp.jvpp.core.dto.LispAdjacenciesGet;
-import io.fd.vpp.jvpp.core.dto.LispAdjacenciesGetReply;
-import io.fd.vpp.jvpp.core.dto.LispEnableDisable;
-import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.ExecutionException;
-import java.util.logging.Logger;
-
-/**
- * Tests lisp adjacency creation and read (custom vpe.api type support showcase).
- */
-public class LispAdjacencyTest {
-
- private static final Logger LOG = Logger.getLogger(LispAdjacencyTest.class.getName());
-
- private static void enableLisp(final FutureJVppCoreFacade jvpp) throws ExecutionException, InterruptedException {
- final LispEnableDisable request = new LispEnableDisable();
- request.isEn = 1;
- jvpp.lispEnableDisable(request).toCompletableFuture().get();
- LOG.info("Lisp enabled successfully");
- }
-
- private static void addLocatorSet(final FutureJVppCoreFacade jvpp) throws ExecutionException, InterruptedException {
- final LispAddDelLocatorSet request = new LispAddDelLocatorSet();
- request.isAdd = 1;
- request.locatorSetName = "ls1".getBytes(StandardCharsets.UTF_8);
- jvpp.lispAddDelLocatorSet(request).toCompletableFuture().get();
- LOG.info("Locator set created successfully:" + request.toString());
- }
-
- private static void addLocalEid(final FutureJVppCoreFacade jvpp) throws ExecutionException, InterruptedException {
- final LispAddDelLocalEid request = new LispAddDelLocalEid();
- request.isAdd = 1;
- request.locatorSetName = "ls1".getBytes(StandardCharsets.UTF_8);
- request.eid = new byte[] {1, 2, 1, 10};
- request.eidType = 0; // ip4
- request.vni = 0;
- request.prefixLen = 32;
- jvpp.lispAddDelLocalEid(request).toCompletableFuture().get();
- LOG.info("Local EID created successfully:" + request.toString());
- }
-
- private static void addRemoteMapping(final FutureJVppCoreFacade jvpp)
- throws ExecutionException, InterruptedException {
- final LispAddDelRemoteMapping request = new LispAddDelRemoteMapping();
- request.isAdd = 1;
- request.vni = 0;
- request.eid = new byte[] {1, 2, 1, 20};
- request.eidLen = 32;
- request.rlocNum = 1;
- request.rlocs = new byte[] {1, 1, 1, 1, 2, 1, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- jvpp.lispAddDelRemoteMapping(request).toCompletableFuture().get();
- LOG.info("Remote mapping created successfully:" + request.toString());
- }
-
- private static void addAdjacency(final FutureJVppCoreFacade jvpp) throws ExecutionException, InterruptedException {
- final LispAddDelAdjacency request = new LispAddDelAdjacency();
- request.isAdd = 1;
- request.leid = new byte[] {1, 2, 1, 10};
- request.leidLen = 32;
- request.reid = new byte[] {1, 2, 1, 20};
- request.reidLen = 32;
- request.eidType = 0; // ip4
- request.vni = 0;
- jvpp.lispAddDelAdjacency(request).toCompletableFuture().get();
- LOG.info("Lisp adjacency created successfully:" + request.toString());
- }
-
- private static void showAdjacencies(final FutureJVppCoreFacade jvpp)
- throws ExecutionException, InterruptedException {
- final LispAdjacenciesGetReply reply =
- jvpp.lispAdjacenciesGet(new LispAdjacenciesGet()).toCompletableFuture().get();
- LOG.info("Lisp adjacency received successfully:" + reply.toString());
- }
-
- private static void testAdjacency(final FutureJVppCoreFacade jvpp) throws Exception {
- enableLisp(jvpp);
- addLocatorSet(jvpp);
- addLocalEid(jvpp);
- addRemoteMapping(jvpp);
- addAdjacency(jvpp);
- showAdjacencies(jvpp);
- }
-
- private static void testFutureApi() throws Exception {
- LOG.info("Create lisp adjacency test");
- try (final JVppRegistry registry = new JVppRegistryImpl("LispAdjacencyTest");
- final FutureJVppCoreFacade jvppFacade = new FutureJVppCoreFacade(registry, new JVppCoreImpl())) {
- LOG.info("Successfully connected to VPP");
-
- testAdjacency(jvppFacade);
- LOG.info("Disconnecting...");
- }
- }
-
- public static void main(String[] args) throws Exception {
- testFutureApi();
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java
deleted file mode 100644
index f82946c3a5f..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java
+++ /dev/null
@@ -1,53 +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.vpp.jvpp.core.test;
-
-import java.io.PrintStream;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlags;
-import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlagsNotification;
-import io.fd.vpp.jvpp.core.dto.WantInterfaceEvents;
-
-final class NotificationUtils {
-
- private NotificationUtils() {}
-
- static PrintStream printNotification(final SwInterfaceSetFlagsNotification msg) {
- return System.out.printf("Received interface notification: ifc: %s%n", msg);
- }
-
- static SwInterfaceSetFlags getChangeInterfaceState() {
- final SwInterfaceSetFlags swInterfaceSetFlags = new SwInterfaceSetFlags();
- swInterfaceSetFlags.swIfIndex = 0;
- swInterfaceSetFlags.adminUpDown = 1;
- swInterfaceSetFlags.deleted = 0;
- return swInterfaceSetFlags;
- }
-
- static WantInterfaceEvents getEnableInterfaceNotificationsReq() {
- WantInterfaceEvents wantInterfaceEvents = new WantInterfaceEvents();
- wantInterfaceEvents.pid = 1;
- wantInterfaceEvents.enableDisable = 1;
- return wantInterfaceEvents;
- }
-
- static WantInterfaceEvents getDisableInterfaceNotificationsReq() {
- WantInterfaceEvents wantInterfaceEvents = new WantInterfaceEvents();
- wantInterfaceEvents.pid = 1;
- wantInterfaceEvents.enableDisable = 0;
- return wantInterfaceEvents;
- }
-}
diff --git a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt
deleted file mode 100644
index 1344dc9ebdb..00000000000
--- a/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-This package contains basic tests for jvpp. To run the tests:
-
-- Make sure VPP is running
-- From VPP's build-root/ folder execute:
- - sudo java -cp build-vpp-native/vpp-api/java/jvpp-registry-17.01.jar:build-vpp-native/vpp-api/java/jvpp-core-17.01.jar io.fd.vpp.jvpp.core.test.[test name]
-
-Available tests:
-CallbackApiTest - Similar to ControlPingTest, invokes more complex calls (e.g. interface dump) using low level JVpp APIs
-CallbackJVppFacadeNotificationTest - Tests interface notifications using Callback based JVpp facade
-CallbackJVppFacadeTest - Execution of more complex calls using Callback based JVpp facade
-CallbackNotificationApiTest - Tests interface notifications using low level JVpp APIs
-ControlPingTest - Simple test executing a single control ping using low level JVpp APIs
-CreateSubInterfaceTest - Tests sub-interface creation
-FutureApiNotificationTest - Tests interface notifications using Future based JVpp facade
-FutureApiTest - Execution of more complex calls using Future based JVpp facade
-L2AclTest - Tests L2 ACL creation
-LispAdjacencyTest - Tests lisp adjacency creation and read (custom vpe.api type support showcase)
diff --git a/vpp-api/java/jvpp-core/jvpp_core.c b/vpp-api/java/jvpp-core/jvpp_core.c
deleted file mode 100644
index ef4cb8e3e7e..00000000000
--- a/vpp-api/java/jvpp-core/jvpp_core.c
+++ /dev/null
@@ -1,117 +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.
- */
-
-#include <vnet/vnet.h>
-
-#include <vpp/api/vpe_msg_enum.h>
-#define vl_typedefs /* define message structures */
-#include <vpp/api/vpe_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun
-#include <vpp/api/vpe_all_api_h.h>
-#undef vl_endianfun
-
-#define vl_print(handle, ...)
-#define vl_printfun
-#include <vpp/api/vpe_all_api_h.h>
-#undef vl_printfun
-
-#include <vnet/api_errno.h>
-#include <vlibapi/api.h>
-#include <vlibmemory/api.h>
-#include <jni.h>
-
-#include <jvpp-common/jvpp_common.h>
-
-// TODO: generate jvpp_plugin_name.c files (or at least reuse plugin's main structure)
-typedef struct {
- /* Base message index for the jvpp-core plugin */
- u16 msg_id_base;
-
- /* Pointer to shared memory queue */
- unix_shared_memory_queue_t * vl_input_queue;
-
- /* VPP api client index */
- u32 my_client_index;
-
- /* Callback object and class references enabling asynchronous Java calls */
- jobject callbackObject;
- jclass callbackClass;
-
-} core_main_t;
-
-core_main_t core_main __attribute__((aligned (64)));
-
-#include "io_fd_vpp_jvpp_core_JVppCoreImpl.h"
-#include "jvpp_core_gen.h"
-
-JNIEXPORT void JNICALL Java_io_fd_vpp_jvpp_core_JVppCoreImpl_init0
-(JNIEnv * env, jclass clazz, jobject callback, jlong queue_address, jint my_client_index) {
- core_main_t * plugin_main = &core_main;
- plugin_main->my_client_index = my_client_index;
- plugin_main->vl_input_queue = (unix_shared_memory_queue_t *)queue_address;
-
- plugin_main->callbackObject = (*env)->NewGlobalRef(env, callback);
- plugin_main->callbackClass = (jclass)(*env)->NewGlobalRef(env, (*env)->GetObjectClass(env, callback));
-
- #define _(N,n) \
- vl_msg_api_set_handlers(VL_API_##N, #n, \
- vl_api_##n##_t_handler, \
- vl_noop_handler, \
- vl_noop_handler, \
- vl_noop_handler, \
- sizeof(vl_api_##n##_t), 1);
- foreach_api_reply_handler;
- #undef _
-}
-
-JNIEXPORT void JNICALL Java_io_fd_vpp_jvpp_core_JVppCoreImpl_close0
-(JNIEnv *env, jclass clazz) {
- core_main_t * plugin_main = &core_main;
-
- // cleanup:
- (*env)->DeleteGlobalRef(env, plugin_main->callbackClass);
- (*env)->DeleteGlobalRef(env, plugin_main->callbackObject);
-
- plugin_main->callbackClass = NULL;
- plugin_main->callbackObject = NULL;
-}
-
-jint JNI_OnLoad(JavaVM *vm, void *reserved) {
- JNIEnv* env;
-
- if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_8) != JNI_OK) {
- return JNI_EVERSION;
- }
-
- if (cache_class_references(env) != 0) {
- clib_warning ("Failed to cache class references\n");
- return JNI_ERR;
- }
-
- return JNI_VERSION_1_8;
-}
-
-void JNI_OnUnload(JavaVM *vm, void *reserved) {
- JNIEnv* env;
- if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_8) != JNI_OK) {
- return;
- }
- delete_class_references(env);
-}
-
-
-
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java
deleted file mode 100644
index 55f25a7bd2e..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java
+++ /dev/null
@@ -1,56 +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.vpp.jvpp;
-
-import io.fd.vpp.jvpp.callback.JVppCallback;
-import io.fd.vpp.jvpp.dto.ControlPing;
-import io.fd.vpp.jvpp.dto.JVppRequest;
-
-/**
- * Base interface for plugin's Java API.
- */
-public interface JVpp extends AutoCloseable {
-
- /**
- * Sends request to vpp.
- *
- * @param request request to be sent
- * @return unique identifer of message in message queue
- * @throws VppInvocationException when message could not be sent
- */
- int send(final JVppRequest request) throws VppInvocationException;
-
- /**
- * Initializes plugin's Java API.
- *
- * @param registry plugin registry
- * @param callback called by vpe.api message handlers
- * @param queueAddress address of vpp shared memory queue
- * @param clientIndex vpp client identifier
- */
- void init(final JVppRegistry registry, final JVppCallback callback, final long queueAddress,
- final int clientIndex);
-
- /**
- * Sends control_ping message.
- *
- * @param controlPing request DTO
- * @return unique identifer of message in message queue
- * @throws VppInvocationException when message could not be sent
- */
- int controlPing(final ControlPing controlPing) throws VppInvocationException;
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java
deleted file mode 100644
index 6535db02358..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java
+++ /dev/null
@@ -1,76 +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.vpp.jvpp;
-
-import io.fd.vpp.jvpp.callback.JVppCallback;
-
-/**
- * Manages VPP connection and stores plugin callbacks.
- */
-public interface JVppRegistry extends AutoCloseable {
-
- /**
- * Vpp connection managed by the registry.
- *
- * @return representation of vpp connection
- */
- VppConnection getConnection();
-
- /**
- * Registers callback and initializes Java API for given plugin.
- *
- * @param jvpp plugin name
- * @param callback callback provided by the plugin
- * @throws NullPointerException if name or callback is null
- * @throws IllegalArgumentException if plugin was already registered
- */
- void register(final JVpp jvpp, final JVppCallback callback);
-
- /**
- * Unregisters callback for the given plugin.
- *
- * @param name plugin name
- * @throws NullPointerException if name is null
- * @throws IllegalArgumentException if plugin was not registered
- */
- void unregister(final String name);
-
- /**
- * Returns callback registered for the plugin.
- *
- * @param name plugin name
- * @return callback provided by the plugin
- * @throws NullPointerException if name is null
- * @throws IllegalArgumentException if plugin was not registered
- */
- JVppCallback get(final String name);
-
- /**
- * Sends control ping. Reply handler calls callback registered for give plugin.
- *
- * Control ping is used for initial RX thread to Java thread attachment
- * that takes place in the plugin's JNI lib
- * and to wrap dump message replies in one list.
- *
- * VPP plugins don't have to provide special control ping, therefore
- * it is necessary to providing control ping support in JVppRegistry.
-
- * @param clazz identifies plugin that should receive ping callback
- * @return unique identifier of message in message queue
- */
- int controlPing(final Class<? extends JVpp> clazz) throws VppInvocationException;
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java
deleted file mode 100644
index 98ef1c158e8..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java
+++ /dev/null
@@ -1,147 +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.vpp.jvpp;
-
-import static java.util.Objects.requireNonNull;
-
-import io.fd.vpp.jvpp.callback.ControlPingCallback;
-import io.fd.vpp.jvpp.callback.JVppCallback;
-import io.fd.vpp.jvpp.dto.ControlPingReply;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Default implementation of JVppRegistry.
- */
-public final class JVppRegistryImpl implements JVppRegistry, ControlPingCallback {
-
- private static final Logger LOG = Logger.getLogger(JVppRegistryImpl.class.getName());
-
- private final VppJNIConnection connection;
- // Unguarded concurrent map, no race conditions expected on top of that
- private final Map<String, JVppCallback> pluginRegistry;
- // Guarded by self
- private final Map<Integer, ControlPingCallback> pingCalls;
-
- public JVppRegistryImpl(final String clientName) throws IOException {
- connection = new VppJNIConnection(clientName);
- connection.connect();
- pluginRegistry = new ConcurrentHashMap<>();
- pingCalls = new HashMap<>();
- }
-
- @Override
- public VppConnection getConnection() {
- return connection;
- }
-
- @Override
- public void register(final JVpp jvpp, final JVppCallback callback) {
- requireNonNull(jvpp, "jvpp should not be null");
- requireNonNull(callback, "Callback should not be null");
- final String name = jvpp.getClass().getName();
- if (pluginRegistry.containsKey(name)) {
- throw new IllegalArgumentException(
- String.format("Callback for plugin %s was already registered", name));
- }
- jvpp.init(this, callback, connection.getConnectionInfo().queueAddress,
- connection.getConnectionInfo().clientIndex);
- pluginRegistry.put(name, callback);
- }
-
- @Override
- public void unregister(final String name) {
- requireNonNull(name, "Plugin name should not be null");
- final JVppCallback previous = pluginRegistry.remove(name);
- assertPluginWasRegistered(name, previous);
- }
-
- @Override
- public JVppCallback get(final String name) {
- requireNonNull(name, "Plugin name should not be null");
- JVppCallback value = pluginRegistry.get(name);
- assertPluginWasRegistered(name, value);
- return value;
- }
-
- private native int controlPing0() throws VppInvocationException;
-
- @Override
- public int controlPing(final Class<? extends JVpp> clazz) throws VppInvocationException {
- connection.checkActive();
- final String name = clazz.getName();
-
- final ControlPingCallback callback = (ControlPingCallback) pluginRegistry.get(clazz.getName());
- assertPluginWasRegistered(name, callback);
-
- synchronized (pingCalls) {
- int context = controlPing0();
- if (context < 0) {
- throw new VppInvocationException("controlPing", context);
- }
-
- pingCalls.put(context, callback);
- return context;
- }
- }
-
- @Override
- public void onControlPingReply(final ControlPingReply reply) {
- final ControlPingCallback callback;
- synchronized (pingCalls) {
- callback = pingCalls.remove(reply.context);
- if (callback == null) {
- LOG.log(Level.WARNING, "No callback was registered for reply context=" + reply.context + " Contexts waiting="
- + pingCalls.keySet());
- return;
- }
- }
- // pass the reply to the callback registered by the ping caller
- callback.onControlPingReply(reply);
- }
-
- @Override
- public void onError(final VppCallbackException ex) {
- final int ctxId = ex.getCtxId();
- final ControlPingCallback callback;
-
- synchronized (pingCalls) {
- callback = pingCalls.get(ctxId);
- }
- if (callback == null) {
- LOG.log(Level.WARNING, "No callback was registered for reply id={0} ", ctxId);
- return;
- }
- // pass the error to the callback registered by the ping caller
- callback.onError(ex);
- }
-
- private static void assertPluginWasRegistered(final String name, final JVppCallback value) {
- if (value == null) {
- throw new IllegalArgumentException(String.format("Callback for plugin %s is not registered", name));
- }
- }
-
- @Override
- public void close() throws Exception {
- connection.close();
- }
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java
deleted file mode 100644
index ce6d1bfc982..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java
+++ /dev/null
@@ -1,73 +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.vpp.jvpp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.PosixFilePermissions;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Utility class for loading JNI libraries.
- */
-public final class NativeLibraryLoader {
-
- private static final Logger LOG = Logger.getLogger(NativeLibraryLoader.class.getName());
-
- private NativeLibraryLoader() {
- throw new UnsupportedOperationException("This utility class cannot be instantiated.");
- }
-
- /**
- * Loads JNI library using class loader of the given class.
- *
- * @param libName name of the library to be loaded
- */
- public static void loadLibrary(final String libName, final Class clazz) throws IOException {
- java.util.Objects.requireNonNull(libName, "libName should not be null");
- java.util.Objects.requireNonNull(clazz, "clazz should not be null");
- try (final InputStream is = clazz.getResourceAsStream('/' + libName)) {
- if (is == null) {
- throw new IOException("Failed to open library resource " + libName);
- }
- loadStream(libName, is);
- }
- }
-
- private static void loadStream(final String libName, final InputStream is) throws IOException {
- final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
- final Path p = Files.createTempFile(libName, null, PosixFilePermissions.asFileAttribute(perms));
- try {
- Files.copy(is, p, StandardCopyOption.REPLACE_EXISTING);
- Runtime.getRuntime().load(p.toString());
- } catch (Exception e) {
- throw new IOException("Failed to load library " + p, e);
- } finally {
- try {
- Files.deleteIfExists(p);
- } catch (IOException e) {
- LOG.log(Level.WARNING, String.format("Failed to delete temporary file %s.", p), e);
- }
- }
- }
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java
deleted file mode 100644
index d71e3055d1f..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java
+++ /dev/null
@@ -1,60 +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.vpp.jvpp;
-
-/**
- * Base exception representing failed operation of JVpp request call
- */
-public abstract class VppBaseCallException extends Exception {
- private final String methodName;
- private final int errorCode;
-
- /**
- * Constructs an VppCallbackException with the specified api method name and error code.
- *
- * @param methodName name of a method, which invocation or execution failed
- * @param errorCode negative error code value associated with this failure
- * @throws NullPointerException if apiMethodName is null
- */
- public VppBaseCallException(final String methodName, final int errorCode) {
- super(String.format("vppApi.%s failed with error code: %d", methodName, errorCode));
- this.methodName = java.util.Objects.requireNonNull(methodName, "apiMethodName is null!");
- this.errorCode = errorCode;
- if(errorCode >= 0) {
- throw new IllegalArgumentException("Error code must be < 0. Was " + errorCode +
- " for " + methodName );
- }
- }
-
- /**
- * Returns name of a method, which invocation failed.
- *
- * @return method name
- */
- public String getMethodName() {
- return methodName;
- }
-
- /**
- * Returns the error code associated with this failure.
- *
- * @return a negative integer error code
- */
- public int getErrorCode() {
- return errorCode;
- }
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java
deleted file mode 100644
index ccfcbd3c100..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java
+++ /dev/null
@@ -1,47 +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.vpp.jvpp;
-
-/**
- * Callback Exception representing failed operation of JVpp request call
- */
-public class VppCallbackException extends VppBaseCallException {
- private final int ctxId;
-
- /**
- * Constructs an VppCallbackException with the specified api method name and error code.
- *
- * @param methodName name of a method, which invocation failed.
- * @param ctxId api request context identifier
- * @param errorCode negative error code value associated with this failure
- * @throws NullPointerException if apiMethodName is null
- */
- public VppCallbackException(final String methodName, final int ctxId, final int errorCode ){
- super(methodName, errorCode);
- this.ctxId = ctxId;
- }
-
- /**
- * Returns api request context identifier.
- *
- * @return value of context identifier
- */
- public int getCtxId() {
- return ctxId;
- }
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java
deleted file mode 100644
index e6fd3bdb257..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java
+++ /dev/null
@@ -1,45 +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.vpp.jvpp;
-
-import java.io.IOException;
-
-/**
- * Representation of a management connection to VPP.
- */
-public interface VppConnection extends AutoCloseable {
-
- /**
- * Opens VppConnection for communication with VPP.
- *
- * @throws IOException if connection is not established
- */
- void connect() throws IOException;
-
- /**
- * Checks if this instance connection is active.
- *
- * @throws IllegalStateException if this instance was disconnected.
- */
- void checkActive();
-
- /**
- * Closes Vpp connection.
- */
- @Override
- void close();
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java
deleted file mode 100644
index a7ccb197e00..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java
+++ /dev/null
@@ -1,33 +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.vpp.jvpp;
-
-/**
- * Exception thrown when Vpp jAPI method invocation failed.
- */
-public class VppInvocationException extends VppBaseCallException {
- /**
- * Constructs an VppApiInvocationFailedException with the specified api method name and error code.
- *
- * @param methodName name of a method, which invocation failed.
- * @param errorCode negative error code value associated with this failure
- * @throws NullPointerException if apiMethodName is null
- */
- public VppInvocationException(final String methodName, final int errorCode) {
- super(methodName, errorCode);
- }
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java
deleted file mode 100644
index 7178bcf7d05..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java
+++ /dev/null
@@ -1,137 +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.vpp.jvpp;
-
-import static io.fd.vpp.jvpp.NativeLibraryLoader.loadLibrary;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * JNI based representation of a management connection to VPP.
- */
-public final class VppJNIConnection implements VppConnection {
- private static final Logger LOG = Logger.getLogger(VppJNIConnection.class.getName());
-
- static {
- final String libName = "libjvpp_registry.so.0.0.0";
- try {
- loadLibrary(libName, VppJNIConnection.class);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, String.format("Can't find vpp jni library: %s", libName), e);
- throw new ExceptionInInitializerError(e);
- }
- }
-
- private ConnectionInfo connectionInfo;
-
- private final String clientName;
- private volatile boolean disconnected = false;
-
- /**
- * Create VPPJNIConnection instance for client connecting to VPP.
- *
- * @param clientName client name instance to be used for communication. Single connection per clientName is
- * allowed.
- */
- public VppJNIConnection(final String clientName) {
- this.clientName = Objects.requireNonNull(clientName, "Null clientName");
- }
-
- /**
- * Guarded by VppJNIConnection.class
- */
- private static final Map<String, VppJNIConnection> connections = new HashMap<>();
-
- /**
- * Initiate VPP connection for current instance
- *
- * Multiple instances are allowed since this class is not a singleton (VPP allows multiple management connections).
- *
- * However only a single connection per clientName is allowed.
- *
- * @throws IOException in case the connection could not be established
- */
-
- @Override
- public void connect() throws IOException {
- _connect();
- }
-
- private void _connect() throws IOException {
- synchronized (VppJNIConnection.class) {
- if (connections.containsKey(clientName)) {
- throw new IOException("Client " + clientName + " already connected");
- }
-
- connectionInfo = clientConnect(clientName);
- if (connectionInfo.status != 0) {
- throw new IOException("Connection returned error " + connectionInfo.status);
- }
- connections.put(clientName, this);
- }
- }
-
- @Override
- public final void checkActive() {
- if (disconnected) {
- throw new IllegalStateException("Disconnected client " + clientName);
- }
- }
-
- @Override
- public final synchronized void close() {
- if (!disconnected) {
- disconnected = true;
- try {
- clientDisconnect();
- } finally {
- synchronized (VppJNIConnection.class) {
- connections.remove(clientName);
- }
- }
- }
- }
-
- public ConnectionInfo getConnectionInfo() {
- return connectionInfo;
- }
-
- /**
- * VPP connection information used by plugins to reuse the connection.
- */
- public static final class ConnectionInfo {
- public final long queueAddress;
- public final int clientIndex;
- public final int status; // FIXME throw exception instead
-
- public ConnectionInfo(long queueAddress, int clientIndex, int status) {
- this.queueAddress = queueAddress;
- this.clientIndex = clientIndex;
- this.status = status;
- }
- }
-
- private static native ConnectionInfo clientConnect(String clientName);
-
- private static native void clientDisconnect();
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java
deleted file mode 100644
index efddfdbb96c..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java
+++ /dev/null
@@ -1,29 +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.vpp.jvpp.callback;
-
-import io.fd.vpp.jvpp.dto.ControlPingReply;
-
-/**
- * Represents callback for control_ping message.
- */
-public interface ControlPingCallback extends JVppCallback {
-
- void onControlPingReply(ControlPingReply reply);
-
-}
-
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java
deleted file mode 100644
index ae02063bb2f..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java
+++ /dev/null
@@ -1,29 +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.vpp.jvpp.callback;
-import io.fd.vpp.jvpp.VppCallbackException;
-
-/**
- * Base JVppCallback interface
- */
-public interface JVppCallback {
- /**
- * onError callback handler used to report failing operation
- * @param ex VppCallbackException object containing details about failing operation
- */
- void onError(VppCallbackException ex);
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java
deleted file mode 100644
index 8ab0cb2140f..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java
+++ /dev/null
@@ -1,24 +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.vpp.jvpp.callback;
-
-/**
-* Notification callback
-*/
-public interface JVppNotificationCallback {
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.java
deleted file mode 100644
index 984e1674e83..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.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.vpp.jvpp.dto;
-
-import io.fd.vpp.jvpp.JVpp;
-import io.fd.vpp.jvpp.VppInvocationException;
-
-/**
- * Represents request DTO for control_ping message.
- */
-public final class ControlPing implements JVppRequest {
-
- @Override
- public int send(final JVpp jvpp) throws VppInvocationException {
- return jvpp.controlPing(this);
- }
-
-}
-
-
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java
deleted file mode 100644
index 61e4d0e423b..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java
+++ /dev/null
@@ -1,58 +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.vpp.jvpp.dto;
-
-import java.util.Objects;
-
-/**
- * Represents reply DTO for control_ping message.
- */
-public final class ControlPingReply implements JVppReply<ControlPing> {
-
- public int context;
- public int clientIndex;
- public int vpePid;
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- final ControlPingReply that = (ControlPingReply) o;
- return context == that.context &&
- clientIndex == that.clientIndex &&
- vpePid == that.vpePid;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(context, clientIndex, vpePid);
- }
-
- @Override
- public String toString() {
- return "ControlPingReply{" +
- "context=" + context +
- ", clientIndex=" + clientIndex +
- ", vpePid=" + vpePid +
- '}';
- }
-}
-
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java
deleted file mode 100644
index 60b98984d9e..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java
+++ /dev/null
@@ -1,24 +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.vpp.jvpp.dto;
-
-/**
-* Base interface for all dump requests
-*/
-public interface JVppDump extends JVppRequest {
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java
deleted file mode 100644
index 5554f50165a..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java
+++ /dev/null
@@ -1,23 +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.vpp.jvpp.dto;
-
-/**
-* Base interface for all notification DTOs
-*/
-public interface JVppNotification {
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java
deleted file mode 100644
index 73f512d42d6..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java
+++ /dev/null
@@ -1,24 +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.vpp.jvpp.dto;
-
-/**
-* Base interface for all reply DTOs
-*/
-public interface JVppReply<REQ extends JVppRequest> {
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java
deleted file mode 100644
index 15111395f9c..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java
+++ /dev/null
@@ -1,25 +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.vpp.jvpp.dto;
-
-/**
-* Base interface for all dump replies
-*/
-public interface JVppReplyDump<REQ extends JVppRequest, RESP extends JVppReply<REQ>>
- extends JVppReply<REQ> {
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.java
deleted file mode 100644
index 9b301da20cf..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.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.vpp.jvpp.dto;
-
-import io.fd.vpp.jvpp.JVpp;
-import io.fd.vpp.jvpp.VppInvocationException;
-
-/**
-* Base interface for all request DTOs
-*/
-public interface JVppRequest {
-
- /**
- * Invoke current operation asynchronously on VPP
- *
- * @return context id of this request. Can be used to track incoming response
- */
- int send(JVpp jvpp) throws VppInvocationException;
-
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java
deleted file mode 100644
index e7df528ae30..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java
+++ /dev/null
@@ -1,141 +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.vpp.jvpp.future;
-
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionStage;
-import io.fd.vpp.jvpp.JVpp;
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.VppInvocationException;
-import io.fd.vpp.jvpp.dto.JVppDump;
-import io.fd.vpp.jvpp.dto.JVppReply;
-import io.fd.vpp.jvpp.dto.JVppReplyDump;
-import io.fd.vpp.jvpp.dto.JVppRequest;
-
-/**
- * Future facade on top of JVpp
- */
-public abstract class AbstractFutureJVppInvoker implements FutureJVppInvoker {
-
- private final JVpp jvpp;
- private final JVppRegistry registry;
-
- /**
- * Guarded by self
- */
- private final Map<Integer, CompletableFuture<? extends JVppReply<?>>> requests;
-
- protected AbstractFutureJVppInvoker(final JVpp jvpp, final JVppRegistry registry,
- final Map<Integer, CompletableFuture<? extends JVppReply<?>>> requestMap) {
- this.jvpp = Objects.requireNonNull(jvpp, "jvpp should not be null");
- this.registry = Objects.requireNonNull(registry, "registry should not be null");
- // Request map represents the shared state between this facade and it's callback
- // where facade puts futures in and callback completes + removes them
- this.requests = Objects.requireNonNull(requestMap, "Null requestMap");
- }
-
- protected final Map<Integer, CompletableFuture<? extends JVppReply<?>>> getRequests() {
- synchronized (requests) {
- return requests;
- }
- }
-
- // TODO use Optional in Future, java8
-
- @Override
- @SuppressWarnings("unchecked")
- public <REQ extends JVppRequest, REPLY extends JVppReply<REQ>> CompletionStage<REPLY> send(REQ req) {
- synchronized(requests) {
- try {
- final CompletableFuture<REPLY> replyCompletableFuture;
- final int contextId = jvpp.send(req);
-
- if(req instanceof JVppDump) {
- throw new IllegalArgumentException("Send with empty reply dump has to be used in case of dump calls");
- }
- replyCompletableFuture = new CompletableFuture<>();
- requests.put(contextId, replyCompletableFuture);
-
- // TODO in case of timeouts/missing replies, requests from the map are not removed
- // consider adding cancel method, that would remove requests from the map and cancel
- // associated replyCompletableFuture
-
- return replyCompletableFuture;
- } catch (VppInvocationException ex) {
- final CompletableFuture<REPLY> replyCompletableFuture = new CompletableFuture<>();
- replyCompletableFuture.completeExceptionally(ex);
- return replyCompletableFuture;
- }
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public <REQ extends JVppRequest, REPLY extends JVppReply<REQ>, DUMP extends JVppReplyDump<REQ, REPLY>> CompletionStage<DUMP> send(
- REQ req, DUMP emptyReplyDump) {
- synchronized(requests) {
- try {
- final CompletableDumpFuture<DUMP> replyCompletableFuture;
- final int contextId = jvpp.send(req);
-
- if(!(req instanceof JVppDump)) {
- throw new IllegalArgumentException("Send without empty reply dump has to be used in case of regular calls");
- }
- replyCompletableFuture = new CompletableDumpFuture<>(contextId, emptyReplyDump);
-
- requests.put(contextId, replyCompletableFuture);
- requests.put(registry.controlPing(jvpp.getClass()), replyCompletableFuture);
-
- // TODO in case of timeouts/missing replies, requests from the map are not removed
- // consider adding cancel method, that would remove requests from the map and cancel
- // associated replyCompletableFuture
-
- return replyCompletableFuture;
- } catch (VppInvocationException ex) {
- final CompletableFuture<DUMP> replyCompletableFuture = new CompletableFuture<>();
- replyCompletableFuture.completeExceptionally(ex);
- return replyCompletableFuture;
- }
- }
- }
-
- public static final class CompletableDumpFuture<T extends JVppReplyDump<?, ?>> extends CompletableFuture<T> {
- private final T replyDump;
- private final int contextId;
-
- public CompletableDumpFuture(final int contextId, final T emptyDump) {
- this.contextId = contextId;
- this.replyDump = emptyDump;
- }
-
- public int getContextId() {
- return contextId;
- }
-
- public T getReplyDump() {
- return replyDump;
- }
- }
-
- @Override
- public void close() throws Exception {
- jvpp.close();
- }
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java
deleted file mode 100644
index 7a48e4181fa..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java
+++ /dev/null
@@ -1,49 +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.vpp.jvpp.future;
-
-
-import io.fd.vpp.jvpp.dto.JVppReply;
-import io.fd.vpp.jvpp.dto.JVppReplyDump;
-import io.fd.vpp.jvpp.dto.JVppRequest;
-
-import java.util.concurrent.CompletionStage;
-import io.fd.vpp.jvpp.notification.NotificationRegistryProvider;
-
-/**
-* Future facade on top of JVpp
-*/
-public interface FutureJVppInvoker extends NotificationRegistryProvider, AutoCloseable {
-
- /**
- * Invoke asynchronous operation on VPP
- *
- * @return CompletionStage with future result of an async VPP call
- * @throws io.fd.vpp.jvpp.VppInvocationException when send request failed with details
- */
- <REQ extends JVppRequest, REPLY extends JVppReply<REQ>> CompletionStage<REPLY> send(REQ req);
-
-
- /**
- * Invoke asynchronous dump operation on VPP
- *
- * @return CompletionStage with aggregated future result of an async VPP dump call
- * @throws io.fd.vpp.jvpp.VppInvocationException when send request failed with details
- */
- <REQ extends JVppRequest, REPLY extends JVppReply<REQ>, DUMP extends JVppReplyDump<REQ, REPLY>> CompletionStage<DUMP> send(
- REQ req, DUMP emptyReplyDump);
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java
deleted file mode 100644
index 3c72ff793a4..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java
+++ /dev/null
@@ -1,25 +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.vpp.jvpp.notification;
-
-/**
- * Base registry for notification callbacks.
- */
-public interface NotificationRegistry extends AutoCloseable {
-
- void close();
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java
deleted file mode 100644
index 4a6e06b705c..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java
+++ /dev/null
@@ -1,28 +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.vpp.jvpp.notification;
-
-/**
- * Provides notification registry
- */
-public interface NotificationRegistryProvider {
-
- /**
- * Get current notification registry instance
- */
- NotificationRegistry getNotificationRegistry();
-}
diff --git a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java
deleted file mode 100644
index 27b4d29f866..00000000000
--- a/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java
+++ /dev/null
@@ -1,44 +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.vpp.jvpp.test;
-
-import io.fd.vpp.jvpp.JVppRegistry;
-import io.fd.vpp.jvpp.JVppRegistryImpl;
-
-/**
- * Run using:
- * sudo java -cp build-vpp-native/vpp-api/java/jvpp-registry-16.09.jar io.fd.vpp.jvpp.test.ConnectionTest
- */
-public class ConnectionTest {
-
- private static void testConnect() throws Exception {
- System.out.println("Testing JNI connection with JVppRegistry");
- final JVppRegistry registry = new JVppRegistryImpl("ConnectionTest");
- try {
- System.out.println("Successfully connected to vpp");
- Thread.sleep(5000);
- System.out.println("Disconnecting...");
- Thread.sleep(1000);
- } finally {
- registry.close();
- }
- }
-
- public static void main(String[] args) throws Exception {
- testConnect();
- }
-}
diff --git a/vpp-api/java/jvpp-registry/jvpp_registry.c b/vpp-api/java/jvpp-registry/jvpp_registry.c
deleted file mode 100644
index cbd5e0ab39a..00000000000
--- a/vpp-api/java/jvpp-registry/jvpp_registry.c
+++ /dev/null
@@ -1,352 +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.
- */
-#define _GNU_SOURCE /* for strcasestr(3) */
-#include <vnet/vnet.h>
-
-#define vl_api_version(n,v) static u32 vpe_api_version = (v);
-#include <vpp/api/vpe.api.h>
-#undef vl_api_version
-
-
-#include <jni.h>
-#include <jvpp-common/jvpp_common.h>
-#include "io_fd_vpp_jvpp_VppJNIConnection.h"
-#include "io_fd_vpp_jvpp_JVppRegistryImpl.h"
-
-#include <vpp/api/vpe_msg_enum.h>
-#define vl_typedefs /* define message structures */
-#include <vpp/api/vpe_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun
-#include <vpp/api/vpe_all_api_h.h>
-#undef vl_endianfun
-
-/* instantiate all the print functions we know about */
-#define vl_print(handle, ...)
-#define vl_printfun
-#include <vpp/api/vpe_all_api_h.h>
-#undef vl_printfun
-
-vlib_main_t vlib_global_main;
-vlib_main_t **vlib_mains;
-
-/*
- * The Java runtime isn't compile w/ -fstack-protector,
- * so we have to supply missing external references for the
- * regular vpp libraries.
- */
-void __stack_chk_guard(void) __attribute__((weak));
-void __stack_chk_guard(void) {
-}
-
-typedef struct {
- /* UThread attachment */
- volatile u32 control_ping_result_ready;
- volatile i32 control_ping_retval;
-
- /* Control poing callback */
- jobject registryObject;
- jclass registryClass;
- jclass controlPingReplyClass;
- jclass callbackExceptionClass;
-
- /* Thread cleanup */
- pthread_key_t cleanup_rx_thread_key;
-
- /* Connected indication */
- volatile u8 is_connected;
-} jvpp_registry_main_t;
-
-jvpp_registry_main_t jvpp_registry_main __attribute__((aligned (64)));
-
-void vl_client_add_api_signatures(vl_api_memclnt_create_t *mp) {
- /*
- * Send the main API signature in slot 0. This bit of code must
- * match the checks in ../vpe/api/api.c: vl_msg_api_version_check().
- */
- mp->api_versions[0] = clib_host_to_net_u32(vpe_api_version);
-}
-
-/* cleanup handler for RX thread */
-static_always_inline void cleanup_rx_thread(void *arg) {
- jvpp_main_t * jm = &jvpp_main;
- jvpp_registry_main_t * rm = &jvpp_registry_main;
-
- vppjni_lock(jm, 99);
-
- int getEnvStat = (*jm->jvm)->GetEnv(jm->jvm, (void **) &(jm->jenv),
- JNI_VERSION_1_8);
- if (getEnvStat == JNI_EVERSION) {
- clib_warning("Unsupported JNI version\n");
- rm->control_ping_retval = VNET_API_ERROR_UNSUPPORTED_JNI_VERSION;
- goto out;
- } else if (getEnvStat != JNI_EDETACHED) {
- (*jm->jvm)->DetachCurrentThread(jm->jvm);
- }
- out: vppjni_unlock(jm);
-}
-
-static void vl_api_control_ping_reply_t_handler(
- vl_api_control_ping_reply_t * mp) {
- jvpp_main_t * jm = &jvpp_main;
- jvpp_registry_main_t * rm = &jvpp_registry_main;
- char was_thread_connected = 0;
-
- // attach to java thread if not attached
- int getEnvStat = (*jm->jvm)->GetEnv(jm->jvm, (void **) &(jm->jenv),
- JNI_VERSION_1_8);
- if (getEnvStat == JNI_EDETACHED) {
- if ((*jm->jvm)->AttachCurrentThread(jm->jvm, (void **) &(jm->jenv),
- NULL) != 0) {
- clib_warning("Failed to attach thread\n");
- rm->control_ping_retval =
- VNET_API_ERROR_FAILED_TO_ATTACH_TO_JAVA_THREAD;
- goto out;
- }
-
- // workaround as we can't use pthread_cleanup_push
- pthread_key_create(&rm->cleanup_rx_thread_key, cleanup_rx_thread);
- // destructor is only called if the value of key is non null
- pthread_setspecific(rm->cleanup_rx_thread_key, (void *) 1);
- was_thread_connected = 1;
- } else if (getEnvStat == JNI_EVERSION) {
- clib_warning("Unsupported JNI version\n");
- rm->control_ping_retval = VNET_API_ERROR_UNSUPPORTED_JNI_VERSION;
- goto out;
- }
-
- if (was_thread_connected == 0) {
- JNIEnv *env = jm->jenv;
- if (mp->retval < 0) {
- call_on_error("controlPing", mp->context, mp->retval,
- rm->registryClass, rm->registryObject,
- rm->callbackExceptionClass);
- } else {
- jmethodID constructor = (*env)->GetMethodID(env,
- rm->controlPingReplyClass, "<init>", "()V");
- jmethodID callbackMethod = (*env)->GetMethodID(env,
- rm->registryClass, "onControlPingReply",
- "(Lio/fd/vpp/jvpp/dto/ControlPingReply;)V");
-
- jobject dto = (*env)->NewObject(env, rm->controlPingReplyClass,
- constructor);
-
- jfieldID contextFieldId = (*env)->GetFieldID(env,
- rm->controlPingReplyClass, "context", "I");
- (*env)->SetIntField(env, dto, contextFieldId,
- clib_net_to_host_u32(mp->context));
-
- jfieldID clientIndexFieldId = (*env)->GetFieldID(env,
- rm->controlPingReplyClass, "clientIndex", "I");
- (*env)->SetIntField(env, dto, clientIndexFieldId,
- clib_net_to_host_u32(mp->client_index));
-
- jfieldID vpePidFieldId = (*env)->GetFieldID(env,
- rm->controlPingReplyClass, "vpePid", "I");
- (*env)->SetIntField(env, dto, vpePidFieldId,
- clib_net_to_host_u32(mp->vpe_pid));
-
- (*env)->CallVoidMethod(env, rm->registryObject, callbackMethod,
- dto);
- (*env)->DeleteLocalRef(env, dto);
- }
- }
-
- out: rm->control_ping_result_ready = 1;
-}
-
-static int send_initial_control_ping() {
- f64 timeout;
- clib_time_t clib_time;
- vl_api_control_ping_t * mp;
- jvpp_main_t * jm = &jvpp_main;
- jvpp_registry_main_t * rm = &jvpp_registry_main;
-
- clib_time_init(&clib_time);
-
- rm->control_ping_result_ready = 0;
- mp = vl_msg_api_alloc(sizeof(*mp));
- memset(mp, 0, sizeof(*mp));
- mp->_vl_msg_id = ntohs(VL_API_CONTROL_PING);
- mp->client_index = jm->my_client_index;
-
- // send message:
- vl_msg_api_send_shmem(jm->vl_input_queue, (u8 *) &mp);
-
- // wait for results: Current time + 10 seconds is the timeout
- timeout = clib_time_now(&clib_time) + 10.0;
- int rv = VNET_API_ERROR_RESPONSE_NOT_READY;
- while (clib_time_now(&clib_time) < timeout) {
- if (rm->control_ping_result_ready == 1) {
- rv = rm->control_ping_retval;
- break;
- }
- }
-
- if (rv != 0) {
- clib_warning("common: first control ping failed: %d", rv);
- }
-
- return rv;
-}
-
-static int connect_to_vpe(char *name) {
- jvpp_main_t * jm = &jvpp_main;
- api_main_t * am = &api_main;
-
- if (vl_client_connect_to_vlib("/vpe-api", name, 32) < 0)
- return -1;
-
- jm->my_client_index = am->my_client_index;
-
- jm->vl_input_queue = am->shmem_hdr->vl_input_queue;
-
- vl_msg_api_set_handlers(VL_API_CONTROL_PING_REPLY, "control_ping_reply",
- vl_api_control_ping_reply_t_handler, vl_noop_handler,
- vl_api_control_ping_reply_t_endian,
- vl_api_control_ping_reply_t_print,
- sizeof(vl_api_control_ping_reply_t), 1);
-
- return send_initial_control_ping();
-}
-
-JNIEXPORT jobject JNICALL Java_io_fd_vpp_jvpp_VppJNIConnection_clientConnect(
- JNIEnv *env, jclass obj, jstring clientName) {
- int rv;
- const char *client_name;
- void vl_msg_reply_handler_hookup(void);
- jvpp_main_t * jm = &jvpp_main;
- jvpp_registry_main_t * rm = &jvpp_registry_main;
-
- jclass connectionInfoClass = (*env)->FindClass(env,
- "io/fd/vpp/jvpp/VppJNIConnection$ConnectionInfo");
- jmethodID connectionInfoConstructor = (*env)->GetMethodID(env,
- connectionInfoClass, "<init>", "(JII)V");
-
- /*
- * Bail out now if we're not running as root
- */
- if (geteuid() != 0) {
- return (*env)->NewObject(env, connectionInfoClass,
- connectionInfoConstructor, 0, 0,
- VNET_API_ERROR_NOT_RUNNING_AS_ROOT);
- }
-
- if (rm->is_connected) {
- return (*env)->NewObject(env, connectionInfoClass,
- connectionInfoConstructor, 0, 0,
- VNET_API_ERROR_ALREADY_CONNECTED);
- }
-
- client_name = (*env)->GetStringUTFChars(env, clientName, 0);
- if (!client_name) {
- return (*env)->NewObject(env, connectionInfoClass,
- connectionInfoConstructor, 0, 0, VNET_API_ERROR_INVALID_VALUE);
- }
-
- rv = connect_to_vpe((char *) client_name);
-
- if (rv < 0)
- clib_warning("connection failed, rv %d", rv);
-
- (*env)->ReleaseStringUTFChars(env, clientName, client_name);
-
- return (*env)->NewObject(env, connectionInfoClass,
- connectionInfoConstructor, (jlong) jm->vl_input_queue,
- (jint) jm->my_client_index, (jint) rv);
-}
-
-JNIEXPORT jint JNICALL Java_io_fd_vpp_jvpp_JVppRegistryImpl_controlPing0(
- JNIEnv *env, jobject regstryObject) {
- jvpp_main_t * jm = &jvpp_main;
- vl_api_control_ping_t * mp;
- u32 my_context_id = vppjni_get_context_id(&jvpp_main);
- jvpp_registry_main_t * rm = &jvpp_registry_main;
-
- if (rm->registryObject == 0) {
- rm->registryObject = (*env)->NewGlobalRef(env, regstryObject);
- }
- if (rm->registryClass == 0) {
- rm->registryClass = (jclass) (*env)->NewGlobalRef(env,
- (*env)->GetObjectClass(env, regstryObject));
- }
-
- mp = vl_msg_api_alloc(sizeof(*mp));
- memset(mp, 0, sizeof(*mp));
- mp->_vl_msg_id = ntohs(VL_API_CONTROL_PING);
- mp->client_index = jm->my_client_index;
- mp->context = clib_host_to_net_u32(my_context_id);
-
- // send message:
- vl_msg_api_send_shmem(jm->vl_input_queue, (u8 *) &mp);
- return my_context_id;
-}
-
-JNIEXPORT void JNICALL Java_io_fd_vpp_jvpp_VppJNIConnection_clientDisconnect(
- JNIEnv *env, jclass clazz) {
- jvpp_registry_main_t * rm = &jvpp_registry_main;
- rm->is_connected = 0; // TODO make thread safe
- vl_client_disconnect_from_vlib();
-
- // cleanup:
- if (rm->registryObject) {
- (*env)->DeleteGlobalRef(env, rm->registryObject);
- rm->registryObject = 0;
- }
- if (rm->registryClass) {
- (*env)->DeleteGlobalRef(env, rm->registryClass);
- rm->registryClass = 0;
- }
-}
-
-jint JNI_OnLoad(JavaVM *vm, void *reserved) {
- jvpp_main_t * jm = &jvpp_main;
- jvpp_registry_main_t * rm = &jvpp_registry_main;
- JNIEnv* env;
-
- if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_8) != JNI_OK) {
- return JNI_EVERSION;
- }
-
- rm->controlPingReplyClass = (jclass) (*env)->NewGlobalRef(env,
- (*env)->FindClass(env, "io/fd/vpp/jvpp/dto/ControlPingReply"));
- if ((*env)->ExceptionCheck(env)) {
- (*env)->ExceptionDescribe(env);
- clib_warning("Failed to cache class references\n");
- return JNI_ERR;
- }
-
- rm->callbackExceptionClass = (jclass) (*env)->NewGlobalRef(env,
- (*env)->FindClass(env, "io/fd/vpp/jvpp/VppCallbackException"));
- if ((*env)->ExceptionCheck(env)) {
- (*env)->ExceptionDescribe(env);
- return JNI_ERR;
- }
-
- jm->jvm = vm;
- return JNI_VERSION_1_8;
-}
-
-void JNI_OnUnload(JavaVM *vm, void *reserved) {
- jvpp_main_t * jm = &jvpp_main;
- JNIEnv* env;
- if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_8) != JNI_OK) {
- return;
- }
-
- jm->jenv = NULL;
- jm->jvm = NULL;
-}
diff --git a/vpp-api/java/jvpp/gen/jvpp_gen.py b/vpp-api/java/jvpp/gen/jvpp_gen.py
deleted file mode 100755
index 5f8df2a9602..00000000000
--- a/vpp-api/java/jvpp/gen/jvpp_gen.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-#
-# 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
-# l
-# 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.
-#
-
-import argparse
-import importlib
-import sys
-import os
-import json
-
-from jvppgen import types_gen
-from jvppgen import callback_gen
-from jvppgen import notification_gen
-from jvppgen import dto_gen
-from jvppgen import jvpp_callback_facade_gen
-from jvppgen import jvpp_future_facade_gen
-from jvppgen import jvpp_impl_gen
-from jvppgen import jvpp_c_gen
-from jvppgen import util
-
-blacklist = [ "memclnt.api", "flowperpkt.api" ]
-
-# Invocation:
-# ~/Projects/vpp/vpp-api/jvpp/gen$ mkdir -p java/io/fd/vpp/jvpp && cd java/io/fd/vpp/jvpp
-# ~/Projects/vpp/vpp-api/jvpp/gen/java/io/fd/vpp/jvpp$ ../../../../jvpp_gen.py -idefs_api_vpp_papi.py
-#
-# Compilation:
-# ~/Projects/vpp/vpp-api/jvpp/gen/java/io/fd/vpp/jvpp$ javac *.java dto/*.java callback/*.java
-#
-# where
-# defs_api_vpp_papi.py - vpe.api in python format (generated by vppapigen)
-
-parser = argparse.ArgumentParser(description='VPP Java API generator')
-parser.add_argument('-i', action="store", dest="inputfiles", nargs='+')
-parser.add_argument('--plugin_name', action="store", dest="plugin_name")
-args = parser.parse_args()
-
-sys.path.append(".")
-
-print "Generating Java API for %s" % args.inputfiles
-print "inputfiles %s" % args.inputfiles
-plugin_name = args.plugin_name
-print "plugin_name %s" % plugin_name
-
-cfg = {}
-
-for inputfile in args.inputfiles:
- if any(substring in inputfile for substring in blacklist):
- print "WARNING: Imput file %s blacklisted" % inputfile
- continue
- _cfg = json.load(open(inputfile, 'r'))
- if 'types' in cfg:
- cfg['types'].extend(_cfg['types'])
- else:
- cfg['types'] = _cfg['types']
- if 'messages' in cfg:
- cfg['messages'].extend(_cfg['messages'])
- else:
- cfg['messages'] = _cfg['messages']
-
-
-def is_request_field(field_name):
- return field_name not in {'_vl_msg_id', 'client_index', 'context'}
-
-
-def is_response_field(field_name):
- return field_name not in {'_vl_msg_id'}
-
-
-def get_args(t, filter):
- arg_list = []
- for i in t:
- if is_crc(i):
- continue
- if not filter(i[1]):
- continue
- arg_list.append(i[1])
- return arg_list
-
-
-def get_types(t, filter):
- types_list = []
- lengths_list = []
- crc = None
- for i in t:
- if is_crc(i):
- crc = ('crc', i['crc'][2:])
- continue
- if not filter(i[1]):
- continue
- if len(i) is 3: # array type
- types_list.append(i[0] + '[]')
- lengths_list.append((i[2], False))
- elif len(i) is 4: # variable length array type
- types_list.append(i[0] + '[]')
- lengths_list.append((i[3], True))
- else: # primitive type
- types_list.append(i[0])
- lengths_list.append((0, False))
- return types_list, lengths_list, crc
-
-
-def is_crc(arg):
- """ Check whether the argument inside message definition is just crc """
- return 'crc' in arg
-
-
-def get_definitions(defs):
- # Pass 1
- func_list = []
- func_name = {}
- for a in defs:
- java_name = util.underscore_to_camelcase(a[0])
-
- # For replies include all the arguments except message_id
- if util.is_reply(java_name):
- types, lengths, crc = get_types(a[1:], is_response_field)
- func_name[a[0]] = dict(
- [('name', a[0]), ('java_name', java_name),
- ('args', get_args(a[1:], is_response_field)), ('full_args', get_args(a[1:], lambda x: True)),
- ('types', types), ('lengths', lengths), crc])
- # For requests skip message_id, client_id and context
- else:
- types, lengths, crc = get_types(a[1:], is_request_field)
- func_name[a[0]] = dict(
- [('name', a[0]), ('java_name', java_name),
- ('args', get_args(a[1:], is_request_field)), ('full_args', get_args(a[1:], lambda x: True)),
- ('types', types), ('lengths', lengths), crc])
-
- # Indexed by name
- func_list.append(func_name[a[0]])
- return func_list, func_name
-
-
-base_package = 'io.fd.vpp.jvpp'
-plugin_package = base_package + '.' + plugin_name
-types_package = 'types'
-dto_package = 'dto'
-callback_package = 'callback'
-notification_package = 'notification'
-future_package = 'future'
-# TODO find better package name
-callback_facade_package = 'callfacade'
-
-types_list, types_name = get_definitions(cfg['types'])
-
-types_gen.generate_types(types_list, plugin_package, types_package, args.inputfiles)
-
-func_list, func_name = get_definitions(cfg['messages'])
-
-dto_gen.generate_dtos(func_list, base_package, plugin_package, plugin_name.title(), dto_package, args.inputfiles)
-jvpp_impl_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name, dto_package, args.inputfiles)
-callback_gen.generate_callbacks(func_list, base_package, plugin_package, plugin_name.title(), callback_package, dto_package, args.inputfiles)
-notification_gen.generate_notification_registry(func_list, base_package, plugin_package, plugin_name.title(), notification_package, callback_package, dto_package, args.inputfiles)
-jvpp_c_gen.generate_jvpp(func_list, plugin_name, args.inputfiles)
-jvpp_future_facade_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name.title(), dto_package, callback_package, notification_package, future_package, args.inputfiles)
-jvpp_callback_facade_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name.title(), dto_package, callback_package, notification_package, callback_facade_package, args.inputfiles)
-
-print "Java API for %s generated successfully" % args.inputfiles
diff --git a/vpp-api/java/jvpp/gen/jvppgen/__init__.py b/vpp-api/java/jvpp/gen/jvppgen/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/__init__.py
+++ /dev/null
diff --git a/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py b/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py
deleted file mode 100644
index 68f70126a04..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os
-import util
-from string import Template
-
-from util import remove_suffix
-
-callback_suffix = "Callback"
-
-callback_template = Template("""
-package $plugin_package.$callback_package;
-
-/**
- * <p>Represents callback for plugin's api file message.
- * <br>It was generated by callback_gen.py based on $inputfile preparsed data:
- * <pre>
-$docs
- * </pre>
- */
-public interface $cls_name extends $base_package.$callback_package.$callback_type {
-
- $callback_method
-
-}
-""")
-
-global_callback_template = Template("""
-package $plugin_package.$callback_package;
-
-/**
- * <p>Global aggregated callback interface.
- * <br>It was generated by callback_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface JVpp${plugin_name}GlobalCallback extends $base_package.$callback_package.ControlPingCallback, $callbacks {
-}
-""")
-
-
-def generate_callbacks(func_list, base_package, plugin_package, plugin_name, callback_package, dto_package, inputfile):
- """ Generates callback interfaces """
- print "Generating Callback interfaces"
-
- if not os.path.exists(callback_package):
- raise Exception("%s folder is missing" % callback_package)
-
- callbacks = []
- for func in func_list:
-
- camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
-
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_name_with_suffix):
- continue
- if not util.is_reply(camel_case_name_with_suffix) and not util.is_notification(func['name']):
- continue
-
- if util.is_reply(camel_case_name_with_suffix):
- camel_case_name = util.remove_reply_suffix(camel_case_name_with_suffix)
- callback_type = "JVppCallback"
- else:
- camel_case_name_with_suffix = util.add_notification_suffix(camel_case_name_with_suffix)
- camel_case_name = camel_case_name_with_suffix
- callback_type = "JVppNotificationCallback"
-
- callbacks.append("{0}.{1}.{2}".format(plugin_package, callback_package, camel_case_name + callback_suffix))
- callback_path = os.path.join(callback_package, camel_case_name + callback_suffix + ".java")
- callback_file = open(callback_path, 'w')
-
- reply_type = "%s.%s.%s" % (plugin_package, dto_package, camel_case_name_with_suffix)
- method = "void on{0}({1} reply);".format(camel_case_name_with_suffix, reply_type)
- callback_file.write(
- callback_template.substitute(inputfile=inputfile,
- docs=util.api_message_to_javadoc(func),
- cls_name=camel_case_name + callback_suffix,
- callback_method=method,
- base_package=base_package,
- plugin_package=plugin_package,
- callback_package=callback_package,
- callback_type=callback_type))
- callback_file.flush()
- callback_file.close()
-
- callback_file = open(os.path.join(callback_package, "JVpp%sGlobalCallback.java" % plugin_name), 'w')
- callback_file.write(global_callback_template.substitute(inputfile=inputfile,
- callbacks=", ".join(callbacks),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- callback_package=callback_package))
- callback_file.flush()
- callback_file.close()
diff --git a/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py b/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
deleted file mode 100644
index a043c9459b0..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
+++ /dev/null
@@ -1,308 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os
-from string import Template
-
-import util
-
-dto_template = Template("""
-package $plugin_package.$dto_package;
-
-/**
- * <p>This class represents $description.
- * <br>It was generated by dto_gen.py based on $inputfile preparsed data:
- * <pre>
-$docs
- * </pre>
- */
-public final class $cls_name implements $base_package.$dto_package.$base_type {
-
-$fields
-$methods
-}
-""")
-
-field_template = Template(""" public $type $name;\n""")
-
-send_template = Template(""" @Override
- public int send(final $base_package.JVpp jvpp) throws io.fd.vpp.jvpp.VppInvocationException {
- return (($plugin_package.JVpp${plugin_name})jvpp).$method_name($args);
- }""")
-
-
-def generate_dtos(func_list, base_package, plugin_package, plugin_name, dto_package, inputfile):
- """ Generates dto objects in a dedicated package """
- print "Generating DTOs"
-
- if not os.path.exists(dto_package):
- raise Exception("%s folder is missing" % dto_package)
-
- for func in func_list:
- camel_case_dto_name = util.underscore_to_camelcase_upper(func['name'])
- camel_case_method_name = util.underscore_to_camelcase(func['name'])
- dto_path = os.path.join(dto_package, camel_case_dto_name + ".java")
-
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_dto_name):
- continue
-
- fields = generate_dto_fields(camel_case_dto_name, func)
- methods = generate_dto_base_methods(camel_case_dto_name, func)
- base_type = ""
-
- # Generate request/reply or dump/dumpReply even if structure can be used as notification
- if not util.is_just_notification(func["name"]):
- if util.is_reply(camel_case_dto_name):
- description = "reply DTO"
- request_dto_name = get_request_name(camel_case_dto_name, func['name'])
- if util.is_details(camel_case_dto_name):
- # FIXME assumption that dump calls end with "Dump" suffix. Not enforced in vpe.api
- base_type += "JVppReply<%s.%s.%s>" % (plugin_package, dto_package, request_dto_name + "Dump")
- generate_dump_reply_dto(request_dto_name, base_package, plugin_package, dto_package,
- camel_case_dto_name, camel_case_method_name, func)
- else:
- base_type += "JVppReply<%s.%s.%s>" % (plugin_package, dto_package, request_dto_name)
- else:
- args = "" if fields is "" else "this"
- methods += send_template.substitute(method_name=camel_case_method_name,
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- args=args)
- if util.is_dump(camel_case_dto_name):
- base_type += "JVppDump"
- description = "dump request DTO"
- else:
- base_type += "JVppRequest"
- description = "request DTO"
-
- write_dto_file(base_package, plugin_package, base_type, camel_case_dto_name, description, dto_package,
- dto_path, fields, func, inputfile, methods)
-
- # for structures that are also used as notifications, generate dedicated notification DTO
- if util.is_notification(func["name"]):
- base_type = "JVppNotification"
- description = "notification DTO"
- camel_case_dto_name = util.add_notification_suffix(camel_case_dto_name)
- dto_path = os.path.join(dto_package, camel_case_dto_name + ".java")
- methods = generate_dto_base_methods(camel_case_dto_name, func)
- write_dto_file(base_package, plugin_package, base_type, camel_case_dto_name, description, dto_package,
- dto_path, fields, func, inputfile, methods)
-
- flush_dump_reply_dtos(inputfile)
-
-
-def generate_dto_base_methods(camel_case_dto_name, func):
- methods = generate_dto_hash(func)
- methods += generate_dto_equals(camel_case_dto_name, func)
- methods += generate_dto_tostring(camel_case_dto_name, func)
- return methods
-
-
-def generate_dto_fields(camel_case_dto_name, func):
- fields = ""
- for t in zip(func['types'], func['args']):
- # for retval don't generate dto field in Reply
- field_name = util.underscore_to_camelcase(t[1])
- if util.is_reply(camel_case_dto_name) and util.is_retval_field(field_name):
- continue
- fields += field_template.substitute(type=util.jni_2_java_type_mapping[t[0]],
- name=field_name)
- return fields
-
-
-tostring_field_template = Template(""" \"$field_name=\" + $field_name + ", " +\n""")
-tostring_array_field_template = Template(""" \"$field_name=\" + java.util.Arrays.toString($field_name) + ", " +\n""")
-tostring_template = Template(""" @Override
- public String toString() {
- return "$cls_name{" +
-$fields_tostring "}";
- }\n\n""")
-
-
-def generate_dto_tostring(camel_case_dto_name, func):
- tostring_fields = ""
- for t in zip(func['types'], func['args']):
-
- field_name = util.underscore_to_camelcase(t[1])
- # for retval don't generate dto field in Reply
- if util.is_retval_field(field_name):
- continue
-
- # handle array types
- if util.is_array(util.jni_2_java_type_mapping[t[0]]):
- tostring_fields += tostring_array_field_template.substitute(field_name=field_name)
- else:
- tostring_fields += tostring_field_template.substitute(field_name=field_name)
-
- return tostring_template.substitute(cls_name=camel_case_dto_name,
- fields_tostring=tostring_fields[:-8])
-
-equals_other_template = Template("""
- final $cls_name other = ($cls_name) o;
-\n""")
-equals_field_template = Template(""" if (!java.util.Objects.equals(this.$field_name, other.$field_name)) {
- return false;
- }\n""")
-equals_array_field_template = Template(""" if (!java.util.Arrays.equals(this.$field_name, other.$field_name)) {
- return false;
- }\n""")
-equals_template = Template(""" @Override
- public boolean equals(final Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-$comparisons
- return true;
- }\n\n""")
-
-
-def generate_dto_equals(camel_case_dto_name, func):
- equals_fields = ""
- for t in zip(func['types'], func['args']):
- field_name = util.underscore_to_camelcase(t[1])
- # for retval don't generate dto field in Reply
- if util.is_retval_field(field_name):
- continue
-
- # handle array types
- if util.is_array(util.jni_2_java_type_mapping[t[0]]):
- equals_fields += equals_array_field_template.substitute(field_name=field_name)
- else:
- equals_fields += equals_field_template.substitute(field_name=field_name)
-
- if equals_fields != "":
- equals_fields = equals_other_template.substitute(cls_name=camel_case_dto_name) + equals_fields
-
- return equals_template.substitute(comparisons=equals_fields)
-
-
-hash_template = Template(""" @Override
- public int hashCode() {
- return java.util.Objects.hash($fields);
- }\n\n""")
-hash_single_array_type_template = Template(""" @Override
- public int hashCode() {
- return java.util.Arrays.hashCode($fields);
- }\n\n""")
-
-
-def generate_dto_hash(func):
- hash_fields = ""
-
- # Special handling for hashCode in case just a single array field is present. Cannot use Objects.equals since the
- # array is mistaken for a varargs parameter. Instead use Arrays.hashCode in such case.
- if len(func['args']) == 1:
- single_type = func['types'][0]
- single_type_name = func['args'][0]
- if util.is_array(util.jni_2_java_type_mapping[single_type]):
- return hash_single_array_type_template.substitute(fields=util.underscore_to_camelcase(single_type_name))
-
- for t in zip(func['types'], func['args']):
- field_name = util.underscore_to_camelcase(t[1])
- # for retval don't generate dto field in Reply
- if util.is_retval_field(field_name):
- continue
-
- hash_fields += field_name + ", "
-
- return hash_template.substitute(fields=hash_fields[:-2])
-
-
-def write_dto_file(base_package, plugin_package, base_type, camel_case_dto_name, description, dto_package, dto_path,
- fields, func, inputfile, methods):
- dto_file = open(dto_path, 'w')
- dto_file.write(dto_template.substitute(inputfile=inputfile,
- description=description,
- docs=util.api_message_to_javadoc(func),
- cls_name=camel_case_dto_name,
- fields=fields,
- methods=methods,
- base_package=base_package,
- plugin_package=plugin_package,
- base_type=base_type,
- dto_package=dto_package))
- dto_file.flush()
- dto_file.close()
-
-
-dump_dto_suffix = "ReplyDump"
-dump_reply_artificial_dtos = {}
-
-
-# Returns request name or special one from unconventional_naming_rep_req map
-def get_request_name(camel_case_dto_name, func_name):
- return util.underscore_to_camelcase_upper(
- util.unconventional_naming_rep_req[func_name]) if func_name in util.unconventional_naming_rep_req \
- else util.remove_reply_suffix(camel_case_dto_name)
-
-
-def flush_dump_reply_dtos(inputfile):
- for dump_reply_artificial_dto in dump_reply_artificial_dtos.values():
- dto_path = os.path.join(dump_reply_artificial_dto['dto_package'],
- dump_reply_artificial_dto['cls_name'] + ".java")
- dto_file = open(dto_path, 'w')
- dto_file.write(dto_template.substitute(inputfile=inputfile,
- description="dump reply wrapper",
- docs=dump_reply_artificial_dto['docs'],
- cls_name=dump_reply_artificial_dto['cls_name'],
- fields=dump_reply_artificial_dto['fields'],
- methods=dump_reply_artificial_dto['methods'],
- plugin_package=dump_reply_artificial_dto['plugin_package'],
- base_package=dump_reply_artificial_dto['base_package'],
- base_type=dump_reply_artificial_dto['base_type'],
- dto_package=dump_reply_artificial_dto['dto_package']))
- dto_file.flush()
- dto_file.close()
-
-
-def generate_dump_reply_dto(request_dto_name, base_package, plugin_package, dto_package, camel_case_dto_name,
- camel_case_method_name, func):
- base_type = "JVppReplyDump<%s.%s.%s, %s.%s.%s>" % (
- plugin_package, dto_package, util.remove_reply_suffix(camel_case_dto_name) + "Dump",
- plugin_package, dto_package, camel_case_dto_name)
- fields = " public java.util.List<%s> %s = new java.util.ArrayList<>();" % (camel_case_dto_name, camel_case_method_name)
- cls_name = camel_case_dto_name + dump_dto_suffix
- # using artificial type for fields, just to bypass the is_array check in base methods generators
- # the type is not really used
- artificial_type = 'u8'
-
- # In case of already existing artificial reply dump DTO, just update it
- # Used for sub-dump dtos
- if request_dto_name in dump_reply_artificial_dtos.keys():
- dump_reply_artificial_dtos[request_dto_name]['fields'] += '\n' + fields
- dump_reply_artificial_dtos[request_dto_name]['field_names'].append(func['name'])
- dump_reply_artificial_dtos[request_dto_name]['field_types'].append(artificial_type)
- methods = '\n' + generate_dto_base_methods(dump_reply_artificial_dtos[request_dto_name]['cls_name'],
- {'args': dump_reply_artificial_dtos[request_dto_name]['field_names'],
- 'types': dump_reply_artificial_dtos[request_dto_name]['field_types']})
- dump_reply_artificial_dtos[request_dto_name]['methods'] = methods
- else:
- methods = '\n' + generate_dto_base_methods(cls_name, {'args': [func['name']],
- 'types': [artificial_type]})
- dump_reply_artificial_dtos[request_dto_name] = ({'docs': util.api_message_to_javadoc(func),
- 'cls_name': cls_name,
- 'fields': fields,
- 'field_names': [func['name']],
- 'field_types': [artificial_type],
- # strip too many newlines at the end of base method block
- 'methods': methods,
- 'plugin_package': plugin_package,
- 'base_package': base_package,
- 'base_type': base_type,
- 'dto_package': dto_package})
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py
deleted file mode 100644
index 328cc8d35d2..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py
+++ /dev/null
@@ -1,295 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-from string import Template
-
-import util
-
-variable_length_array_value_template = Template("""mp->${length_var_name}""")
-variable_length_array_template = Template("""clib_net_to_host_${length_field_type}(${value})""")
-
-dto_field_id_template = Template("""
- jfieldID ${field_reference_name}FieldId = (*env)->GetFieldID(env, ${class_ref_name}Class, "${field_name}", "${jni_signature}");""")
-
-default_dto_field_setter_template = Template("""
- (*env)->Set${jni_setter}(env, ${object_name}, ${field_reference_name}FieldId, mp->${c_name});
-""")
-
-variable_length_array_value_template = Template("""mp->${length_var_name}""")
-variable_length_array_template = Template("""clib_net_to_host_${length_field_type}(${value})""")
-
-u16_dto_field_setter_template = Template("""
- (*env)->Set${jni_setter}(env, ${object_name}, ${field_reference_name}FieldId, clib_net_to_host_u16(mp->${c_name}));
-""")
-
-u32_dto_field_setter_template = Template("""
- (*env)->Set${jni_setter}(env, ${object_name}, ${field_reference_name}FieldId, clib_net_to_host_u32(mp->${c_name}));
-""")
-
-u64_dto_field_setter_template = Template("""
- (*env)->Set${jni_setter}(env, ${object_name}, ${field_reference_name}FieldId, clib_net_to_host_u64(mp->${c_name}));
-""")
-
-u8_array_dto_field_setter_template = Template("""
- jbyteArray ${field_reference_name} = (*env)->NewByteArray(env, ${field_length});
- (*env)->SetByteArrayRegion(env, ${field_reference_name}, 0, ${field_length}, (const jbyte*)mp->${c_name});
- (*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
- (*env)->DeleteLocalRef(env, ${field_reference_name});
-""")
-
-u16_array_dto_field_setter_template = Template("""
- {
- jshortArray ${field_reference_name} = (*env)->NewShortArray(env, ${field_length});
- jshort * ${field_reference_name}ArrayElements = (*env)->GetShortArrayElements(env, ${field_reference_name}, NULL);
- unsigned int _i;
- for (_i = 0; _i < ${field_length}; _i++) {
- ${field_reference_name}ArrayElements[_i] = clib_net_to_host_u16(mp->${c_name}[_i]);
- }
-
- (*env)->ReleaseShortArrayElements(env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
- (*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
- (*env)->DeleteLocalRef(env, ${field_reference_name});
- }
-""")
-
-u32_array_dto_field_setter_template = Template("""
- {
- jintArray ${field_reference_name} = (*env)->NewIntArray(env, ${field_length});
- jint * ${field_reference_name}ArrayElements = (*env)->GetIntArrayElements(env, ${field_reference_name}, NULL);
- unsigned int _i;
- for (_i = 0; _i < ${field_length}; _i++) {
- ${field_reference_name}ArrayElements[_i] = clib_net_to_host_u32(mp->${c_name}[_i]);
- }
-
- (*env)->ReleaseIntArrayElements(env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
- (*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
- (*env)->DeleteLocalRef(env, ${field_reference_name});
- }
-""")
-
-# For each u64 array we get its elements. Then we convert values to host byte order.
-# All changes to jlong* buffer are written to jlongArray (isCopy is set to NULL)
-u64_array_dto_field_setter_template = Template("""
- {
- jlongArray ${field_reference_name} = (*env)->NewLongArray(env, ${field_length});
- jlong * ${field_reference_name}ArrayElements = (*env)->GetLongArrayElements(env, ${field_reference_name}, NULL);
- unsigned int _i;
- for (_i = 0; _i < ${field_length}; _i++) {
- ${field_reference_name}ArrayElements[_i] = clib_net_to_host_u64(mp->${c_name}[_i]);
- }
-
- (*env)->ReleaseLongArrayElements(env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
- (*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
- (*env)->DeleteLocalRef(env, ${field_reference_name});
- }
-""")
-
-dto_field_setter_templates = {'u8': default_dto_field_setter_template,
- 'u16': u16_dto_field_setter_template,
- 'u32': u32_dto_field_setter_template,
- 'i32': u32_dto_field_setter_template,
- 'u64': u64_dto_field_setter_template,
- 'f64': default_dto_field_setter_template, # fixme
- 'u8[]': u8_array_dto_field_setter_template,
- 'u16[]': u16_array_dto_field_setter_template,
- 'u32[]': u32_array_dto_field_setter_template,
- 'u64[]': u64_array_dto_field_setter_template
- }
-
-
-def jni_reply_handler_for_type(handler_name, ref_name, field_type, c_name, field_reference_name,
- field_name, field_length, is_variable_len_array, length_field_type,
- object_name="dto"):
- """
- Generates jni code that initializes a field of java object (dto or custom type).
- To be used in reply message handlers.
- :param field_type: type of the field to be initialized (as defined in vpe.api)
- :param c_name: name of the message struct member that stores initialization value
- :param field_reference_name: name of the field reference in generated code
- :param field_name: name of the field (camelcase)
- :param field_length: integer or name of variable that stores field length
- :param object_name: name of the object to be initialized
- """
-
- # todo move validation to vppapigen
- if field_type.endswith('[]') and field_length == '0':
- raise Exception('Variable array \'%s\' defined in \'%s\' '
- 'should have defined length (e.g. \'%s[%s_length]\''
- % (c_name, handler_name, c_name, c_name))
-
- if is_variable_len_array:
- length_var_name = field_length
- field_length = variable_length_array_value_template.substitute(length_var_name=length_var_name)
- if length_field_type != 'u8': # we need net to host conversion:
- field_length = variable_length_array_template.substitute(
- length_field_type=length_field_type, value=field_length)
-
- # for retval don't generate setters
- if util.is_retval_field(c_name):
- return ""
-
- jni_signature = util.jni_2_signature_mapping[field_type]
- jni_setter = util.jni_field_accessors[field_type]
-
- result = dto_field_id_template.substitute(
- field_reference_name=field_reference_name,
- field_name=field_name,
- class_ref_name=ref_name,
- jni_signature=jni_signature)
-
- dto_setter_template = dto_field_setter_templates[field_type]
-
- result += dto_setter_template.substitute(
- jni_signature=jni_signature,
- object_name=object_name,
- field_reference_name=field_reference_name,
- c_name=c_name,
- jni_setter=jni_setter,
- field_length=field_length)
- return result
-
-
-request_field_identifier_template = Template("""
- jfieldID ${field_reference_name}FieldId = (*env)->GetFieldID(env, ${object_name}Class, "${field_name}", "${jni_signature}");
- ${jni_type} ${field_reference_name} = (*env)->Get${jni_getter}(env, ${object_name}, ${field_reference_name}FieldId);
- """)
-
-array_length_enforcement_template = Template("""
- size_t max_size = ${field_length};
- if (cnt > max_size) cnt = max_size;""")
-
-u8_struct_setter_template = Template("""
- mp->${c_name} = ${field_reference_name};""")
-
-u16_struct_setter_template = Template("""
- mp->${c_name} = clib_host_to_net_u16(${field_reference_name});""")
-
-u32_struct_setter_template = Template("""
- mp->${c_name} = clib_host_to_net_u32(${field_reference_name});""")
-
-i32_struct_setter_template = Template("""
- mp->${c_name} = clib_host_to_net_i32(${field_reference_name});!""")
-
-u64_struct_setter_template = Template("""
- mp->${c_name} = clib_host_to_net_u64(${field_reference_name});""")
-
-array_length_enforcement_template = Template("""
- size_t max_size = ${field_length};
- if (cnt > max_size) cnt = max_size;""")
-
-u8_array_struct_setter_template = Template("""
- if (${field_reference_name}) {
- jsize cnt = (*env)->GetArrayLength (env, ${field_reference_name});
- ${field_length_check}
- (*env)->GetByteArrayRegion(env, ${field_reference_name}, 0, cnt, (jbyte *)mp->${c_name});
- }
-""")
-
-u16_array_struct_setter_template = Template("""
- if (${field_reference_name}) {
- jshort * ${field_reference_name}ArrayElements = (*env)->GetShortArrayElements(env, ${field_reference_name}, NULL);
- size_t _i;
- jsize cnt = (*env)->GetArrayLength (env, ${field_reference_name});
- ${field_length_check}
- for (_i = 0; _i < cnt; _i++) {
- mp->${c_name}[_i] = clib_host_to_net_u16(${field_reference_name}ArrayElements[_i]);
- }
- (*env)->ReleaseShortArrayElements (env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
- }
- """)
-
-u32_array_struct_setter_template = Template("""
- if (${field_reference_name}) {
- jint * ${field_reference_name}ArrayElements = (*env)->GetIntArrayElements(env, ${field_reference_name}, NULL);
- size_t _i;
- jsize cnt = (*env)->GetArrayLength (env, ${field_reference_name});
- ${field_length_check}
- for (_i = 0; _i < cnt; _i++) {
- mp->${c_name}[_i] = clib_host_to_net_u32(${field_reference_name}ArrayElements[_i]);
- }
- (*env)->ReleaseIntArrayElements (env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
- }
- """)
-
-u64_array_struct_setter_template = Template("""
- if (${field_reference_name}) {
- jlong * ${field_reference_name}ArrayElements = (*env)->GetLongArrayElements(env, ${field_reference_name}, NULL);
- size_t _i;
- jsize cnt = (*env)->GetArrayLength (env, ${field_reference_name});
- ${field_length_check}
- for (_i = 0; _i < cnt; _i++) {
- mp->${c_name}[_i] = clib_host_to_net_u64(${field_reference_name}ArrayElements[_i]);
- }
- (*env)->ReleaseLongArrayElements (env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
- }
- """)
-
-struct_setter_templates = {'u8': u8_struct_setter_template,
- 'u16': u16_struct_setter_template,
- 'u32': u32_struct_setter_template,
- 'i32': u32_struct_setter_template,
- 'u64': u64_struct_setter_template,
- 'u8[]': u8_array_struct_setter_template,
- 'u16[]': u16_array_struct_setter_template,
- 'u32[]': u32_array_struct_setter_template,
- 'u64[]': u64_array_struct_setter_template
- }
-
-
-def jni_request_binding_for_type(field_type, c_name, field_reference_name, field_name, field_length,
- is_variable_len_array, object_name="request"):
- """
- Generates jni code that initializes C structure that corresponds to a field of java object
- (dto or custom type). To be used in request message handlers.
- :param field_type: type of the field to be initialized (as defined in vpe.api)
- :param c_name: name of the message struct member to be initialized
- :param field_reference_name: name of the field reference in generated code
- :param field_name: name of the field (camelcase)
- :param field_length: integer or name of variable that stores field length
- :param object_name: name of the object to be initialized
- """
- # field identifiers
- jni_type = util.vpp_2_jni_type_mapping[field_type]
- jni_signature = util.jni_2_signature_mapping[field_type]
- jni_getter = util.jni_field_accessors[field_type]
-
- # field identifier
- msg_initialization = request_field_identifier_template.substitute(
- jni_type=jni_type,
- field_reference_name=field_reference_name,
- field_name=field_name,
- jni_signature=jni_signature,
- jni_getter=jni_getter,
- object_name=object_name)
-
- # field setter
- field_length_check = ""
-
- # check if we are processing variable length array:
- if is_variable_len_array:
- field_length = util.underscore_to_camelcase(field_length)
-
- # enforce max length if array has fixed length or uses variable length syntax
- if str(field_length) != "0":
- field_length_check = array_length_enforcement_template.substitute(field_length=field_length)
-
- struct_setter_template = struct_setter_templates[field_type]
-
- msg_initialization += struct_setter_template.substitute(
- c_name=c_name,
- field_reference_name=field_reference_name,
- field_length_check=field_length_check)
-
- return msg_initialization
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
deleted file mode 100644
index 5fc84c7b050..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
+++ /dev/null
@@ -1,343 +0,0 @@
-#!/usr/bin/env python
-#
-# 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
-# l
-# 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.
-#
-
-import os, util
-from string import Template
-
-import jni_gen
-
-
-def is_manually_generated(f_name, plugin_name):
- return f_name in {'control_ping_reply'}
-
-
-class_reference_template = Template("""jclass ${ref_name}Class;
-""")
-
-find_class_invocation_template = Template("""
- ${ref_name}Class = (jclass)(*env)->NewGlobalRef(env, (*env)->FindClass(env, "io/fd/vpp/jvpp/${plugin_name}/dto/${class_name}"));
- if ((*env)->ExceptionCheck(env)) {
- (*env)->ExceptionDescribe(env);
- return JNI_ERR;
- }""")
-
-find_class_template = Template("""
- ${ref_name}Class = (jclass)(*env)->NewGlobalRef(env, (*env)->FindClass(env, "${class_name}"));
- if ((*env)->ExceptionCheck(env)) {
- (*env)->ExceptionDescribe(env);
- return JNI_ERR;
- }""")
-
-delete_class_invocation_template = Template("""
- if (${ref_name}Class) {
- (*env)->DeleteGlobalRef(env, ${ref_name}Class);
- }""")
-
-class_cache_template = Template("""
-$class_references
-static int cache_class_references(JNIEnv* env) {
- $find_class_invocations
- return 0;
-}
-
-static void delete_class_references(JNIEnv* env) {
- $delete_class_invocations
-}""")
-
-
-def generate_class_cache(func_list, plugin_name):
- class_references = []
- find_class_invocations = []
- delete_class_invocations = []
- for f in func_list:
- c_name = f['name']
- class_name = util.underscore_to_camelcase_upper(c_name)
- ref_name = util.underscore_to_camelcase(c_name)
-
- if util.is_ignored(c_name) or util.is_control_ping(class_name):
- continue
-
- if util.is_reply(class_name):
- class_references.append(class_reference_template.substitute(
- ref_name=ref_name))
- find_class_invocations.append(find_class_invocation_template.substitute(
- plugin_name=plugin_name,
- ref_name=ref_name,
- class_name=class_name))
- delete_class_invocations.append(delete_class_invocation_template.substitute(ref_name=ref_name))
- elif util.is_notification(c_name):
- class_references.append(class_reference_template.substitute(
- ref_name=util.add_notification_suffix(ref_name)))
- find_class_invocations.append(find_class_invocation_template.substitute(
- plugin_name=plugin_name,
- ref_name=util.add_notification_suffix(ref_name),
- class_name=util.add_notification_suffix(class_name)))
- delete_class_invocations.append(delete_class_invocation_template.substitute(
- ref_name=util.add_notification_suffix(ref_name)))
-
- # add exception class to class cache
- ref_name = 'callbackException'
- class_name = 'io/fd/vpp/jvpp/VppCallbackException'
- class_references.append(class_reference_template.substitute(
- ref_name=ref_name))
- find_class_invocations.append(find_class_template.substitute(
- ref_name=ref_name,
- class_name=class_name))
- delete_class_invocations.append(delete_class_invocation_template.substitute(ref_name=ref_name))
-
- return class_cache_template.substitute(
- class_references="".join(class_references), find_class_invocations="".join(find_class_invocations),
- delete_class_invocations="".join(delete_class_invocations))
-
-
-# TODO: cache method and field identifiers to achieve better performance
-# https://jira.fd.io/browse/HONEYCOMB-42
-request_class_template = Template("""
- jclass requestClass = (*env)->FindClass(env, "io/fd/vpp/jvpp/${plugin_name}/dto/${java_name_upper}");""")
-
-request_field_identifier_template = Template("""
- jfieldID ${field_reference_name}FieldId = (*env)->GetFieldID(env, ${object_name}Class, "${field_name}", "${jni_signature}");
- ${jni_type} ${field_reference_name} = (*env)->Get${jni_getter}(env, ${object_name}, ${field_reference_name}FieldId);
- """)
-
-
-jni_impl_template = Template("""
-/**
- * JNI binding for sending ${c_name} message.
- * Generated based on $inputfile preparsed data:
-$api_data
- */
-JNIEXPORT jint JNICALL Java_io_fd_vpp_jvpp_${plugin_name}_JVpp${java_plugin_name}Impl_${field_name}0
-(JNIEnv * env, jclass clazz$args) {
- ${plugin_name}_main_t *plugin_main = &${plugin_name}_main;
- vl_api_${c_name}_t * mp;
- u32 my_context_id = vppjni_get_context_id (&jvpp_main);
- $request_class
-
- // create message:
- mp = vl_msg_api_alloc(sizeof(*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_${c_name_uppercase} + plugin_main->msg_id_base);
- mp->client_index = plugin_main->my_client_index;
- mp->context = clib_host_to_net_u32 (my_context_id);
-
- $msg_initialization
-
- // send message:
- vl_msg_api_send_shmem (plugin_main->vl_input_queue, (u8 *)&mp);
- if ((*env)->ExceptionCheck(env)) {
- return JNI_ERR;
- }
- return my_context_id;
-}""")
-
-def generate_jni_impl(func_list, plugin_name, inputfile):
- jni_impl = []
- for f in func_list:
- f_name = f['name']
- camel_case_function_name = util.underscore_to_camelcase(f_name)
- if is_manually_generated(f_name, plugin_name) or util.is_reply(camel_case_function_name) \
- or util.is_ignored(f_name) or util.is_just_notification(f_name):
- continue
-
- arguments = ''
- request_class = ''
- msg_initialization = ''
- f_name_uppercase = f_name.upper()
-
- if f['args']:
- arguments = ', jobject request'
- camel_case_function_name_upper = util.underscore_to_camelcase_upper(f_name)
-
- request_class = request_class_template.substitute(
- java_name_upper=camel_case_function_name_upper,
- plugin_name=plugin_name)
-
- for t in zip(f['types'], f['args'], f['lengths']):
- field_name = util.underscore_to_camelcase(t[1])
- msg_initialization += jni_gen.jni_request_binding_for_type(field_type=t[0], c_name=t[1],
- field_reference_name=field_name,
- field_name=field_name,
- field_length=t[2][0],
- is_variable_len_array=t[2][1])
-
- jni_impl.append(jni_impl_template.substitute(
- inputfile=inputfile,
- api_data=util.api_message_to_javadoc(f),
- field_reference_name=camel_case_function_name,
- field_name=camel_case_function_name,
- c_name_uppercase=f_name_uppercase,
- c_name=f_name,
- plugin_name=plugin_name,
- java_plugin_name=plugin_name.title(),
- request_class=request_class,
- msg_initialization=msg_initialization,
- args=arguments))
-
- return "\n".join(jni_impl)
-
-# code fragment for checking result of the operation before sending request reply
-callback_err_handler_template = Template("""
- // for negative result don't send callback message but send error callback
- if (mp->retval<0) {
- call_on_error("${handler_name}", mp->context, mp->retval, plugin_main->callbackClass, plugin_main->callbackObject, callbackExceptionClass);
- return;
- }
- if (mp->retval == VNET_API_ERROR_IN_PROGRESS) {
- clib_warning("Result in progress");
- return;
- }
-""")
-
-msg_handler_template = Template("""
-/**
- * Handler for ${handler_name} message.
- * Generated based on $inputfile preparsed data:
-$api_data
- */
-static void vl_api_${handler_name}_t_handler (vl_api_${handler_name}_t * mp)
-{
- ${plugin_name}_main_t *plugin_main = &${plugin_name}_main;
- JNIEnv *env = jvpp_main.jenv;
-
- $err_handler
-
- jmethodID constructor = (*env)->GetMethodID(env, ${class_ref_name}Class, "<init>", "()V");
- jmethodID callbackMethod = (*env)->GetMethodID(env, plugin_main->callbackClass, "on${dto_name}", "(Lio/fd/vpp/jvpp/${plugin_name}/dto/${dto_name};)V");
-
- jobject dto = (*env)->NewObject(env, ${class_ref_name}Class, constructor);
- $dto_setters
-
- (*env)->CallVoidMethod(env, plugin_main->callbackObject, callbackMethod, dto);
- // free DTO as per http://stackoverflow.com/questions/1340938/memory-leak-when-calling-java-code-from-c-using-jni
- (*env)->DeleteLocalRef(env, dto);
-}""")
-
-
-def generate_msg_handlers(func_list, plugin_name, inputfile):
- handlers = []
- for f in func_list:
- handler_name = f['name']
- dto_name = util.underscore_to_camelcase_upper(handler_name)
- ref_name = util.underscore_to_camelcase(handler_name)
-
- if is_manually_generated(handler_name, plugin_name) or util.is_ignored(handler_name):
- continue
-
- if not util.is_reply(dto_name) and not util.is_notification(handler_name):
- continue
-
- if util.is_notification(handler_name):
- dto_name = util.add_notification_suffix(dto_name)
- ref_name = util.add_notification_suffix(ref_name)
-
- dto_setters = ''
- err_handler = ''
- # dto setters
- for t in zip(f['types'], f['args'], f['lengths']):
- c_name = t[1]
- java_name = util.underscore_to_camelcase(c_name)
- field_length = t[2][0]
- is_variable_len_array = t[2][1]
- length_field_type = None
- if is_variable_len_array:
- length_field_type = f['types'][f['args'].index(field_length)]
- dto_setters += jni_gen.jni_reply_handler_for_type(handler_name=handler_name, ref_name=ref_name,
- field_type=t[0], c_name=t[1],
- field_reference_name=java_name,
- field_name=java_name, field_length=field_length,
- is_variable_len_array=is_variable_len_array,
- length_field_type=length_field_type)
-
- # for retval don't generate setters and generate retval check
- if util.is_retval_field(c_name):
- err_handler = callback_err_handler_template.substitute(
- handler_name=handler_name
- )
- continue
-
- handlers.append(msg_handler_template.substitute(
- inputfile=inputfile,
- api_data=util.api_message_to_javadoc(f),
- handler_name=handler_name,
- plugin_name=plugin_name,
- dto_name=dto_name,
- class_ref_name=ref_name,
- dto_setters=dto_setters,
- err_handler=err_handler))
-
- return "\n".join(handlers)
-
-
-handler_registration_template = Template("""_(${upercase_name}, ${name}) \\
-""")
-
-
-def generate_handler_registration(func_list):
- handler_registration = ["#define foreach_api_reply_handler \\\n"]
- for f in func_list:
- name = f['name']
- camelcase_name = util.underscore_to_camelcase(f['name'])
-
- if (not util.is_reply(camelcase_name) and not util.is_notification(name)) or util.is_ignored(name) \
- or util.is_control_ping(camelcase_name):
- continue
-
- handler_registration.append(handler_registration_template.substitute(
- name=name,
- upercase_name=name.upper()))
-
- return "".join(handler_registration)
-
-
-jvpp_c_template = Template("""/**
- * This file contains JNI bindings for jvpp Java API.
- * It was generated by jvpp_c_gen.py based on $inputfile
- * (python representation of api file generated by vppapigen).
- */
-
-// JAVA class reference cache
-$class_cache
-
-// JNI bindings
-$jni_implementations
-
-// Message handlers
-$msg_handlers
-
-// Registration of message handlers in vlib
-$handler_registration
-""")
-
-def generate_jvpp(func_list, plugin_name, inputfile):
- """ Generates jvpp C file """
- print "Generating jvpp C"
-
- class_cache = generate_class_cache(func_list, plugin_name)
- jni_impl = generate_jni_impl(func_list, plugin_name, inputfile)
- msg_handlers = generate_msg_handlers(func_list, plugin_name, inputfile)
- handler_registration = generate_handler_registration(func_list)
-
- jvpp_c_file = open("jvpp_%s_gen.h" % plugin_name, 'w')
- jvpp_c_file.write(jvpp_c_template.substitute(
- inputfile=inputfile,
- class_cache=class_cache,
- jni_implementations=jni_impl,
- msg_handlers=msg_handlers,
- handler_registration=handler_registration))
- jvpp_c_file.flush()
- jvpp_c_file.close()
-
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_callback_facade_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_callback_facade_gen.py
deleted file mode 100644
index ac096a7163d..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_callback_facade_gen.py
+++ /dev/null
@@ -1,324 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os, util
-from string import Template
-
-import callback_gen
-import dto_gen
-
-jvpp_ifc_template = Template("""
-package $plugin_package.$callback_facade_package;
-
-/**
- * <p>Callback Java API representation of $plugin_package plugin.
- * <br>It was generated by jvpp_callback_facade_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface CallbackJVpp${plugin_name} extends $base_package.$notification_package.NotificationRegistryProvider, java.lang.AutoCloseable {
-
- // TODO add send
-
-$methods
-}
-""")
-
-jvpp_impl_template = Template("""
-package $plugin_package.$callback_facade_package;
-
-/**
- * <p>Default implementation of Callback${plugin_name}JVpp interface.
- * <br>It was generated by jvpp_callback_facade_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public final class CallbackJVpp${plugin_name}Facade implements CallbackJVpp${plugin_name} {
-
- private final $plugin_package.JVpp${plugin_name} jvpp;
- private final java.util.Map<Integer, $base_package.$callback_package.JVppCallback> callbacks;
- private final $plugin_package.$notification_package.${plugin_name}NotificationRegistryImpl notificationRegistry = new $plugin_package.$notification_package.${plugin_name}NotificationRegistryImpl();
- /**
- * <p>Create CallbackJVpp${plugin_name}Facade object for provided JVpp instance.
- * Constructor internally creates CallbackJVppFacadeCallback class for processing callbacks
- * and then connects to provided JVpp instance
- *
- * @param jvpp provided $base_package.JVpp instance
- *
- * @throws java.io.IOException in case instance cannot connect to JVPP
- */
- public CallbackJVpp${plugin_name}Facade(final $base_package.JVppRegistry registry, final $plugin_package.JVpp${plugin_name} jvpp) throws java.io.IOException {
- this.jvpp = java.util.Objects.requireNonNull(jvpp,"jvpp is null");
- this.callbacks = new java.util.HashMap<>();
- java.util.Objects.requireNonNull(registry, "JVppRegistry should not be null");
- registry.register(jvpp, new CallbackJVpp${plugin_name}FacadeCallback(this.callbacks, notificationRegistry));
- }
-
- @Override
- public $plugin_package.$notification_package.${plugin_name}NotificationRegistry getNotificationRegistry() {
- return notificationRegistry;
- }
-
- @Override
- public void close() throws Exception {
- jvpp.close();
- }
-
- // TODO add send()
-
-$methods
-}
-""")
-
-method_template = Template(
- """ void $name($plugin_package.$dto_package.$request request, $plugin_package.$callback_package.$callback callback) throws $base_package.VppInvocationException;""")
-
-method_impl_template = Template(""" public final void $name($plugin_package.$dto_package.$request request, $plugin_package.$callback_package.$callback callback) throws $base_package.VppInvocationException {
- synchronized (callbacks) {
- callbacks.put(jvpp.$name(request), callback);
- }
- }
-""")
-
-no_arg_method_template = Template(""" void $name($plugin_package.$callback_package.$callback callback) throws $base_package.VppInvocationException;""")
-no_arg_method_impl_template = Template(""" public final void $name($plugin_package.$callback_package.$callback callback) throws $base_package.VppInvocationException {
- synchronized (callbacks) {
- callbacks.put(jvpp.$name(), callback);
- }
- }
-""")
-
-
-def generate_jvpp(func_list, base_package, plugin_package, plugin_name, dto_package, callback_package, notification_package, callback_facade_package, inputfile):
- """ Generates callback facade """
- print "Generating JVpp callback facade"
-
- if os.path.exists(callback_facade_package):
- util.remove_folder(callback_facade_package)
-
- os.mkdir(callback_facade_package)
-
- methods = []
- methods_impl = []
- for func in func_list:
-
- if util.is_notification(func['name']) or util.is_ignored(func['name']):
- continue
-
- camel_case_name = util.underscore_to_camelcase(func['name'])
- camel_case_name_upper = util.underscore_to_camelcase_upper(func['name'])
- if util.is_reply(camel_case_name) or util.is_control_ping(camel_case_name):
- continue
-
- # Strip suffix for dump calls
- callback_type = get_request_name(camel_case_name_upper, func['name']) + callback_gen.callback_suffix
-
- if len(func['args']) == 0:
- methods.append(no_arg_method_template.substitute(name=camel_case_name,
- base_package=base_package,
- plugin_package=plugin_package,
- dto_package=dto_package,
- callback_package=callback_package,
- callback=callback_type))
- methods_impl.append(no_arg_method_impl_template.substitute(name=camel_case_name,
- base_package=base_package,
- plugin_package=plugin_package,
- dto_package=dto_package,
- callback_package=callback_package,
- callback=callback_type))
- else:
- methods.append(method_template.substitute(name=camel_case_name,
- request=camel_case_name_upper,
- base_package=base_package,
- plugin_package=plugin_package,
- dto_package=dto_package,
- callback_package=callback_package,
- callback=callback_type))
- methods_impl.append(method_impl_template.substitute(name=camel_case_name,
- request=camel_case_name_upper,
- base_package=base_package,
- plugin_package=plugin_package,
- dto_package=dto_package,
- callback_package=callback_package,
- callback=callback_type))
-
- join = os.path.join(callback_facade_package, "CallbackJVpp%s.java" % plugin_name)
- jvpp_file = open(join, 'w')
- jvpp_file.write(
- jvpp_ifc_template.substitute(inputfile=inputfile,
- methods="\n".join(methods),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- dto_package=dto_package,
- notification_package=notification_package,
- callback_facade_package=callback_facade_package))
- jvpp_file.flush()
- jvpp_file.close()
-
- jvpp_file = open(os.path.join(callback_facade_package, "CallbackJVpp%sFacade.java" % plugin_name), 'w')
- jvpp_file.write(jvpp_impl_template.substitute(inputfile=inputfile,
- methods="\n".join(methods_impl),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- dto_package=dto_package,
- notification_package=notification_package,
- callback_package=callback_package,
- callback_facade_package=callback_facade_package))
- jvpp_file.flush()
- jvpp_file.close()
-
- generate_callback(func_list, base_package, plugin_package, plugin_name, dto_package, callback_package, notification_package, callback_facade_package, inputfile)
-
-
-jvpp_facade_callback_template = Template("""
-package $plugin_package.$callback_facade_package;
-
-/**
- * <p>Implementation of JVppGlobalCallback interface for Java Callback API.
- * <br>It was generated by jvpp_callback_facade_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public final class CallbackJVpp${plugin_name}FacadeCallback implements $plugin_package.$callback_package.JVpp${plugin_name}GlobalCallback {
-
- private final java.util.Map<Integer, $base_package.$callback_package.JVppCallback> requests;
- private final $plugin_package.$notification_package.Global${plugin_name}NotificationCallback notificationCallback;
- private static final java.util.logging.Logger LOG = java.util.logging.Logger.getLogger(CallbackJVpp${plugin_name}FacadeCallback.class.getName());
-
- public CallbackJVpp${plugin_name}FacadeCallback(final java.util.Map<Integer, $base_package.$callback_package.JVppCallback> requestMap,
- final $plugin_package.$notification_package.Global${plugin_name}NotificationCallback notificationCallback) {
- this.requests = requestMap;
- this.notificationCallback = notificationCallback;
- }
-
- @Override
- public void onError($base_package.VppCallbackException reply) {
-
- $base_package.$callback_package.JVppCallback failedCall;
- synchronized(requests) {
- failedCall = requests.remove(reply.getCtxId());
- }
-
- if(failedCall != null) {
- try {
- failedCall.onError(reply);
- } catch(RuntimeException ex) {
- ex.addSuppressed(reply);
- LOG.log(java.util.logging.Level.WARNING, String.format("Callback: %s failed while handling exception: %s", failedCall, reply), ex);
- }
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void onControlPingReply($base_package.$dto_package.ControlPingReply reply) {
-
- $base_package.$callback_package.ControlPingCallback callback;
- synchronized(requests) {
- callback = ($base_package.$callback_package.ControlPingCallback) requests.remove(reply.context);
- }
-
- if(callback != null) {
- callback.onControlPingReply(reply);
- }
- }
-
-$methods
-}
-""")
-
-jvpp_facade_callback_method_template = Template("""
- @Override
- @SuppressWarnings("unchecked")
- public void on$callback_dto($plugin_package.$dto_package.$callback_dto reply) {
-
- $plugin_package.$callback_package.$callback callback;
- synchronized(requests) {
- callback = ($plugin_package.$callback_package.$callback) requests.remove(reply.context);
- }
-
- if(callback != null) {
- callback.on$callback_dto(reply);
- }
- }
-""")
-
-jvpp_facade_callback_notification_method_template = Template("""
- @Override
- @SuppressWarnings("unchecked")
- public void on$callback_dto($plugin_package.$dto_package.$callback_dto notification) {
- notificationCallback.on$callback_dto(notification);
- }
-""")
-
-
-def generate_callback(func_list, base_package, plugin_package, plugin_name, dto_package, callback_package, notification_package, callback_facade_package, inputfile):
- callbacks = []
- for func in func_list:
-
- camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
-
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_name_with_suffix):
- continue
-
- if util.is_reply(camel_case_name_with_suffix):
- callbacks.append(jvpp_facade_callback_method_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- callback_package=callback_package,
- callback=util.remove_reply_suffix(camel_case_name_with_suffix) + callback_gen.callback_suffix,
- callback_dto=camel_case_name_with_suffix))
-
- if util.is_notification(func["name"]):
- with_notification_suffix = util.add_notification_suffix(camel_case_name_with_suffix)
- callbacks.append(jvpp_facade_callback_notification_method_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- callback_package=callback_package,
- callback=with_notification_suffix + callback_gen.callback_suffix,
- callback_dto=with_notification_suffix))
-
- jvpp_file = open(os.path.join(callback_facade_package, "CallbackJVpp%sFacadeCallback.java" % plugin_name), 'w')
- jvpp_file.write(jvpp_facade_callback_template.substitute(inputfile=inputfile,
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- dto_package=dto_package,
- notification_package=notification_package,
- callback_package=callback_package,
- methods="".join(callbacks),
- callback_facade_package=callback_facade_package))
- jvpp_file.flush()
- jvpp_file.close()
-
-
-# Returns request name or special one from unconventional_naming_rep_req map
-def get_request_name(camel_case_dto_name, func_name):
- if func_name in reverse_dict(util.unconventional_naming_rep_req):
- request_name = util.underscore_to_camelcase_upper(reverse_dict(util.unconventional_naming_rep_req)[func_name])
- else:
- request_name = camel_case_dto_name
- return remove_suffix(request_name)
-
-
-def reverse_dict(map):
- return dict((v, k) for k, v in map.iteritems())
-
-
-def remove_suffix(name):
- if util.is_reply(name):
- return util.remove_reply_suffix(name)
- else:
- if util.is_dump(name):
- return util.remove_suffix(name, util.dump_suffix)
- else:
- return name
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_future_facade_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_future_facade_gen.py
deleted file mode 100644
index ebb840f795f..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_future_facade_gen.py
+++ /dev/null
@@ -1,331 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os
-from string import Template
-
-import dto_gen
-import util
-
-jvpp_facade_callback_template = Template("""
-package $plugin_package.$future_package;
-
-/**
- * <p>Async facade callback setting values to future objects
- * <br>It was generated by jvpp_future_facade_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public final class FutureJVpp${plugin_name}FacadeCallback implements $plugin_package.$callback_package.JVpp${plugin_name}GlobalCallback {
-
- private final java.util.Map<java.lang.Integer, java.util.concurrent.CompletableFuture<? extends $base_package.$dto_package.JVppReply<?>>> requests;
- private final $plugin_package.$notification_package.Global${plugin_name}NotificationCallback notificationCallback;
-
- public FutureJVpp${plugin_name}FacadeCallback(
- final java.util.Map<java.lang.Integer, java.util.concurrent.CompletableFuture<? extends $base_package.$dto_package.JVppReply<?>>> requestMap,
- final $plugin_package.$notification_package.Global${plugin_name}NotificationCallback notificationCallback) {
- this.requests = requestMap;
- this.notificationCallback = notificationCallback;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void onError($base_package.VppCallbackException reply) {
- final java.util.concurrent.CompletableFuture<$base_package.$dto_package.JVppReply<?>> completableFuture;
-
- synchronized(requests) {
- completableFuture = (java.util.concurrent.CompletableFuture<$base_package.$dto_package.JVppReply<?>>) requests.get(reply.getCtxId());
- }
-
- if(completableFuture != null) {
- completableFuture.completeExceptionally(reply);
-
- synchronized(requests) {
- requests.remove(reply.getCtxId());
- }
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void onControlPingReply($base_package.$dto_package.ControlPingReply reply) {
- final java.util.concurrent.CompletableFuture<$base_package.$dto_package.JVppReply<?>> completableFuture;
-
- synchronized(requests) {
- completableFuture = (java.util.concurrent.CompletableFuture<$base_package.$dto_package.JVppReply<?>>) requests.get(reply.context);
- }
-
- if(completableFuture != null) {
- // Finish dump call
- if (completableFuture instanceof $base_package.$future_package.AbstractFutureJVppInvoker.CompletableDumpFuture) {
- completableFuture.complete((($base_package.$future_package.AbstractFutureJVppInvoker.CompletableDumpFuture) completableFuture).getReplyDump());
- // Remove future mapped to dump call context id
- synchronized(requests) {
- requests.remove((($base_package.$future_package.AbstractFutureJVppInvoker.CompletableDumpFuture) completableFuture).getContextId());
- }
- } else {
- completableFuture.complete(reply);
- }
-
- synchronized(requests) {
- requests.remove(reply.context);
- }
- }
- }
-
-$methods
-}
-""")
-
-jvpp_facade_callback_method_template = Template("""
- @Override
- @SuppressWarnings("unchecked")
- public void on$callback_dto($plugin_package.$dto_package.$callback_dto reply) {
- final java.util.concurrent.CompletableFuture<$base_package.$dto_package.JVppReply<?>> completableFuture;
-
- synchronized(requests) {
- completableFuture = (java.util.concurrent.CompletableFuture<$base_package.$dto_package.JVppReply<?>>) requests.get(reply.context);
- }
-
- if(completableFuture != null) {
- completableFuture.complete(reply);
-
- synchronized(requests) {
- requests.remove(reply.context);
- }
- }
- }
-""")
-
-jvpp_facade_callback_notification_method_template = Template("""
- @Override
- public void on$callback_dto($plugin_package.$dto_package.$callback_dto notification) {
- notificationCallback.on$callback_dto(notification);
- }
-""")
-
-jvpp_facade_details_callback_method_template = Template("""
- @Override
- @SuppressWarnings("unchecked")
- public void on$callback_dto($plugin_package.$dto_package.$callback_dto reply) {
- final $base_package.$future_package.AbstractFutureJVppInvoker.CompletableDumpFuture<$plugin_package.$dto_package.$callback_dto_reply_dump> completableFuture;
-
- synchronized(requests) {
- completableFuture = ($base_package.$future_package.AbstractFutureJVppInvoker.CompletableDumpFuture<$plugin_package.$dto_package.$callback_dto_reply_dump>) requests.get(reply.context);
- }
-
- if(completableFuture != null) {
- completableFuture.getReplyDump().$callback_dto_field.add(reply);
- }
- }
-""")
-
-
-def generate_jvpp(func_list, base_package, plugin_package, plugin_name, dto_package, callback_package, notification_package, future_facade_package, inputfile):
- """ Generates JVpp interface and JNI implementation """
- print "Generating JVpp future facade"
-
- if not os.path.exists(future_facade_package):
- raise Exception("%s folder is missing" % future_facade_package)
-
- methods = []
- methods_impl = []
- callbacks = []
- for func in func_list:
- camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
-
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_name_with_suffix):
- continue
-
- if not util.is_reply(camel_case_name_with_suffix) and not util.is_notification(func['name']):
- continue
-
- camel_case_method_name = util.underscore_to_camelcase(func['name'])
-
- if not util.is_notification(func["name"]):
- camel_case_request_method_name = util.remove_reply_suffix(util.underscore_to_camelcase(func['name']))
- if util.is_details(camel_case_name_with_suffix):
- camel_case_reply_name = get_standard_dump_reply_name(util.underscore_to_camelcase_upper(func['name']),
- func['name'])
- callbacks.append(jvpp_facade_details_callback_method_template.substitute(base_package=base_package,
- plugin_package=plugin_package,
- dto_package=dto_package,
- callback_dto=camel_case_name_with_suffix,
- callback_dto_field=camel_case_method_name,
- callback_dto_reply_dump=camel_case_reply_name + dto_gen.dump_dto_suffix,
- future_package=future_facade_package))
-
- methods.append(future_jvpp_method_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- method_name=camel_case_request_method_name +
- util.underscore_to_camelcase_upper(util.dump_suffix),
- reply_name=camel_case_reply_name + dto_gen.dump_dto_suffix,
- request_name=util.remove_reply_suffix(camel_case_reply_name) +
- util.underscore_to_camelcase_upper(util.dump_suffix)))
- methods_impl.append(future_jvpp_dump_method_impl_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- method_name=camel_case_request_method_name +
- util.underscore_to_camelcase_upper(util.dump_suffix),
- reply_name=camel_case_reply_name + dto_gen.dump_dto_suffix,
- request_name=util.remove_reply_suffix(camel_case_reply_name) +
- util.underscore_to_camelcase_upper(util.dump_suffix)))
- else:
- request_name = util.underscore_to_camelcase_upper(util.unconventional_naming_rep_req[func['name']]) \
- if func['name'] in util.unconventional_naming_rep_req else util.remove_reply_suffix(camel_case_name_with_suffix)
-
- methods.append(future_jvpp_method_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- method_name=camel_case_request_method_name,
- reply_name=camel_case_name_with_suffix,
- request_name=request_name))
- methods_impl.append(future_jvpp_method_impl_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- method_name=camel_case_request_method_name,
- reply_name=camel_case_name_with_suffix,
- request_name=request_name))
-
- callbacks.append(jvpp_facade_callback_method_template.substitute(base_package=base_package,
- plugin_package=plugin_package,
- dto_package=dto_package,
- callback_dto=camel_case_name_with_suffix))
-
- if util.is_notification(func["name"]):
- callbacks.append(jvpp_facade_callback_notification_method_template.substitute(plugin_package=plugin_package,
- dto_package=dto_package,
- callback_dto=util.add_notification_suffix(camel_case_name_with_suffix)))
-
- jvpp_file = open(os.path.join(future_facade_package, "FutureJVpp%sFacadeCallback.java" % plugin_name), 'w')
- jvpp_file.write(jvpp_facade_callback_template.substitute(inputfile=inputfile,
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- dto_package=dto_package,
- notification_package=notification_package,
- callback_package=callback_package,
- methods="".join(callbacks),
- future_package=future_facade_package))
- jvpp_file.flush()
- jvpp_file.close()
-
- jvpp_file = open(os.path.join(future_facade_package, "FutureJVpp%s.java" % plugin_name), 'w')
- jvpp_file.write(future_jvpp_template.substitute(inputfile=inputfile,
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- notification_package=notification_package,
- methods="".join(methods),
- future_package=future_facade_package))
- jvpp_file.flush()
- jvpp_file.close()
-
- jvpp_file = open(os.path.join(future_facade_package, "FutureJVpp%sFacade.java" % plugin_name), 'w')
- jvpp_file.write(future_jvpp_facade_template.substitute(inputfile=inputfile,
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- dto_package=dto_package,
- notification_package=notification_package,
- methods="".join(methods_impl),
- future_package=future_facade_package))
- jvpp_file.flush()
- jvpp_file.close()
-
-
-future_jvpp_template = Template('''
-package $plugin_package.$future_package;
-
-/**
- * <p>Async facade extension adding specific methods for each request invocation
- * <br>It was generated by jvpp_future_facade_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface FutureJVpp${plugin_name} extends $base_package.$future_package.FutureJVppInvoker {
-$methods
-
- @Override
- public $plugin_package.$notification_package.${plugin_name}NotificationRegistry getNotificationRegistry();
-
-}
-''')
-
-future_jvpp_method_template = Template('''
- java.util.concurrent.CompletionStage<$plugin_package.$dto_package.$reply_name> $method_name($plugin_package.$dto_package.$request_name request);
-''')
-
-
-future_jvpp_facade_template = Template('''
-package $plugin_package.$future_package;
-
-/**
- * <p>Implementation of FutureJVpp based on AbstractFutureJVppInvoker
- * <br>It was generated by jvpp_future_facade_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public class FutureJVpp${plugin_name}Facade extends $base_package.$future_package.AbstractFutureJVppInvoker implements FutureJVpp${plugin_name} {
-
- private final $plugin_package.$notification_package.${plugin_name}NotificationRegistryImpl notificationRegistry = new $plugin_package.$notification_package.${plugin_name}NotificationRegistryImpl();
-
- /**
- * <p>Create FutureJVpp${plugin_name}Facade object for provided JVpp instance.
- * Constructor internally creates FutureJVppFacadeCallback class for processing callbacks
- * and then connects to provided JVpp instance
- *
- * @param jvpp provided $base_package.JVpp instance
- *
- * @throws java.io.IOException in case instance cannot connect to JVPP
- */
- public FutureJVpp${plugin_name}Facade(final $base_package.JVppRegistry registry, final $base_package.JVpp jvpp) throws java.io.IOException {
- super(jvpp, registry, new java.util.HashMap<>());
- java.util.Objects.requireNonNull(registry, "JVppRegistry should not be null");
- registry.register(jvpp, new FutureJVpp${plugin_name}FacadeCallback(getRequests(), notificationRegistry));
- }
-
- @Override
- public $plugin_package.$notification_package.${plugin_name}NotificationRegistry getNotificationRegistry() {
- return notificationRegistry;
- }
-
-$methods
-}
-''')
-
-future_jvpp_method_impl_template = Template('''
- @Override
- public java.util.concurrent.CompletionStage<$plugin_package.$dto_package.$reply_name> $method_name($plugin_package.$dto_package.$request_name request) {
- return send(request);
- }
-''')
-
-future_jvpp_dump_method_impl_template = Template('''
- @Override
- public java.util.concurrent.CompletionStage<$plugin_package.$dto_package.$reply_name> $method_name($plugin_package.$dto_package.$request_name request) {
- return send(request, new $plugin_package.$dto_package.$reply_name());
- }
-''')
-
-
-# Returns request name or special one from unconventional_naming_rep_req map
-def get_standard_dump_reply_name(camel_case_dto_name, func_name):
- # FIXME this is a hotfix for sub-details callbacks
- # FIXME also for L2FibTableEntry
- # It's all because unclear mapping between
- # request -> reply,
- # dump -> reply, details,
- # notification_start -> reply, notifications
-
- # vpe.api needs to be "standardized" so we can parse the information and create maps before generating java code
- suffix = func_name.split("_")[-1]
- return util.underscore_to_camelcase_upper(
- util.unconventional_naming_rep_req[func_name]) + util.underscore_to_camelcase_upper(suffix) if func_name in util.unconventional_naming_rep_req \
- else camel_case_dto_name
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py
deleted file mode 100644
index 4146c1416ba..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os, util
-from string import Template
-
-jvpp_ifc_template = Template("""
-package $plugin_package;
-
-/**
- * <p>Java representation of plugin's api file.
- * <br>It was generated by jvpp_impl_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface JVpp${plugin_name} extends $base_package.JVpp {
-
- /**
- * Generic dispatch method for sending requests to VPP
- *
- * @throws io.fd.vpp.jvpp.VppInvocationException if send request had failed
- */
- int send($base_package.$dto_package.JVppRequest request) throws io.fd.vpp.jvpp.VppInvocationException;
-
-$methods
-}
-""")
-
-jvpp_impl_template = Template("""
-package $plugin_package;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.PosixFilePermissions;
-import java.util.Set;
-import java.util.logging.Logger;
-import $base_package.callback.JVppCallback;
-import $base_package.VppConnection;
-import $base_package.JVppRegistry;
-
-/**
- * <p>Default implementation of JVpp interface.
- * <br>It was generated by jvpp_impl_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public final class JVpp${plugin_name}Impl implements $plugin_package.JVpp${plugin_name} {
-
- private final static Logger LOG = Logger.getLogger(JVpp${plugin_name}Impl.class.getName());
- private static final String LIBNAME = "libjvpp_${plugin_name_underscore}.so.0.0.0";
-
- // FIXME using NativeLibraryLoader makes load fail could not find (WantInterfaceEventsReply).
- static {
- try {
- loadLibrary();
- } catch (Exception e) {
- LOG.severe("Can't find jvpp jni library: " + LIBNAME);
- throw new ExceptionInInitializerError(e);
- }
- }
-
- private static void loadStream(final InputStream is) throws IOException {
- final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
- final Path p = Files.createTempFile(LIBNAME, null, PosixFilePermissions.asFileAttribute(perms));
- try {
- Files.copy(is, p, StandardCopyOption.REPLACE_EXISTING);
-
- try {
- Runtime.getRuntime().load(p.toString());
- } catch (UnsatisfiedLinkError e) {
- throw new IOException("Failed to load library " + p, e);
- }
- } finally {
- try {
- Files.deleteIfExists(p);
- } catch (IOException e) {
- }
- }
- }
-
- private static void loadLibrary() throws IOException {
- try (final InputStream is = JVpp${plugin_name}Impl.class.getResourceAsStream('/' + LIBNAME)) {
- if (is == null) {
- throw new IOException("Failed to open library resource " + LIBNAME);
- }
- loadStream(is);
- }
- }
-
- private VppConnection connection;
- private JVppRegistry registry;
-
- private static native void init0(final JVppCallback callback, final long queueAddress, final int clientIndex);
- @Override
- public void init(final JVppRegistry registry, final JVppCallback callback, final long queueAddress, final int clientIndex) {
- this.registry = java.util.Objects.requireNonNull(registry, "registry should not be null");
- this.connection = java.util.Objects.requireNonNull(registry.getConnection(), "connection should not be null");
- connection.checkActive();
- init0(callback, queueAddress, clientIndex);
- }
-
- private static native void close0();
- @Override
- public void close() {
- close0();
- }
-
- @Override
- public int send($base_package.$dto_package.JVppRequest request) throws io.fd.vpp.jvpp.VppInvocationException {
- return request.send(this);
- }
-
- @Override
- public final int controlPing(final io.fd.vpp.jvpp.dto.ControlPing controlPing) throws io.fd.vpp.jvpp.VppInvocationException {
- return registry.controlPing(JVpp${plugin_name}Impl.class);
- }
-
-$methods
-}
-""")
-
-method_template = Template(""" int $name($plugin_package.$dto_package.$request request) throws io.fd.vpp.jvpp.VppInvocationException;""")
-method_native_template = Template(
- """ private static native int ${name}0($plugin_package.$dto_package.$request request);""")
-method_impl_template = Template(""" public final int $name($plugin_package.$dto_package.$request request) throws io.fd.vpp.jvpp.VppInvocationException {
- java.util.Objects.requireNonNull(request,"Null request object");
- connection.checkActive();
- int result=${name}0(request);
- if(result<0){
- throw new io.fd.vpp.jvpp.VppInvocationException("${name}",result);
- }
- return result;
- }
-""")
-
-no_arg_method_template = Template(""" int $name() throws io.fd.vpp.jvpp.VppInvocationException;""")
-no_arg_method_native_template = Template(""" private static native int ${name}0() throws io.fd.vpp.jvpp.VppInvocationException;""")
-no_arg_method_impl_template = Template(""" public final int $name() throws io.fd.vpp.jvpp.VppInvocationException {
- connection.checkActive();
- int result=${name}0();
- if(result<0){
- throw new io.fd.vpp.jvpp.VppInvocationException("${name}",result);
- }
- return result;
- }
-""")
-
-
-def generate_jvpp(func_list, base_package, plugin_package, plugin_name_underscore, dto_package, inputfile):
- """ Generates JVpp interface and JNI implementation """
- print "Generating JVpp"
- plugin_name = util.underscore_to_camelcase_upper(plugin_name_underscore)
-
- methods = []
- methods_impl = []
- for func in func_list:
-
- # Skip structures that are used only as notifications
- if util.is_just_notification(func['name']) or util.is_ignored(func['name']):
- continue
-
- camel_case_name = util.underscore_to_camelcase(func['name'])
- camel_case_name_upper = util.underscore_to_camelcase_upper(func['name'])
- if util.is_reply(camel_case_name):
- continue
-
- if len(func['args']) == 0:
- methods.append(no_arg_method_template.substitute(name=camel_case_name))
- methods_impl.append(no_arg_method_native_template.substitute(name=camel_case_name))
- methods_impl.append(no_arg_method_impl_template.substitute(name=camel_case_name))
- else:
- methods.append(method_template.substitute(name=camel_case_name,
- request=camel_case_name_upper,
- plugin_package=plugin_package,
- dto_package=dto_package))
- methods_impl.append(method_native_template.substitute(name=camel_case_name,
- request=camel_case_name_upper,
- plugin_package=plugin_package,
- dto_package=dto_package))
- methods_impl.append(method_impl_template.substitute(name=camel_case_name,
- request=camel_case_name_upper,
- plugin_package=plugin_package,
- dto_package=dto_package))
-
- jvpp_file = open("JVpp%s.java" % plugin_name, 'w')
- jvpp_file.write(
- jvpp_ifc_template.substitute(inputfile=inputfile,
- methods="\n".join(methods),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- dto_package=dto_package))
- jvpp_file.flush()
- jvpp_file.close()
-
- jvpp_file = open("JVpp%sImpl.java" % plugin_name, 'w')
- jvpp_file.write(jvpp_impl_template.substitute(inputfile=inputfile,
- methods="\n".join(methods_impl),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- plugin_name_underscore=plugin_name_underscore,
- dto_package=dto_package))
- jvpp_file.flush()
- jvpp_file.close()
diff --git a/vpp-api/java/jvpp/gen/jvppgen/notification_gen.py b/vpp-api/java/jvpp/gen/jvppgen/notification_gen.py
deleted file mode 100644
index eb380fc8ea3..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/notification_gen.py
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os
-
-import callback_gen
-import util
-from string import Template
-
-notification_registry_template = Template("""
-package $plugin_package.$notification_package;
-
-/**
- * <p>Registry for notification callbacks defined in ${plugin_name}.
- * <br>It was generated by notification_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface ${plugin_name}NotificationRegistry extends $base_package.$notification_package.NotificationRegistry {
-
- $register_callback_methods
-
- @Override
- void close();
-}
-""")
-
-global_notification_callback_template = Template("""
-package $plugin_package.$notification_package;
-
-/**
- * <p>Aggregated callback interface for notifications only.
- * <br>It was generated by notification_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface Global${plugin_name}NotificationCallback$callbacks {
-
-}
-""")
-
-notification_registry_impl_template = Template("""
-package $plugin_package.$notification_package;
-
-/**
- * <p>Notification registry delegating notification processing to registered callbacks.
- * <br>It was generated by notification_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public final class ${plugin_name}NotificationRegistryImpl implements ${plugin_name}NotificationRegistry, Global${plugin_name}NotificationCallback {
-
- // TODO add a special NotificationCallback interface and only allow those to be registered
- private final java.util.concurrent.ConcurrentMap<Class<? extends $base_package.$dto_package.JVppNotification>, $base_package.$callback_package.JVppNotificationCallback> registeredCallbacks =
- new java.util.concurrent.ConcurrentHashMap<>();
-
- $register_callback_methods
- $handler_methods
-
- @Override
- public void close() {
- registeredCallbacks.clear();
- }
-}
-""")
-
-register_callback_impl_template = Template("""
- public java.lang.AutoCloseable register$callback(final $plugin_package.$callback_package.$callback callback){
- if(null != registeredCallbacks.putIfAbsent($plugin_package.$dto_package.$notification.class, callback)){
- throw new IllegalArgumentException("Callback for " + $plugin_package.$dto_package.$notification.class +
- "notification already registered");
- }
- return () -> registeredCallbacks.remove($plugin_package.$dto_package.$notification.class);
- }
-""")
-
-handler_impl_template = Template("""
- @Override
- public void on$notification(
- final $plugin_package.$dto_package.$notification notification) {
- final $base_package.$callback_package.JVppNotificationCallback jVppNotificationCallback = registeredCallbacks.get($plugin_package.$dto_package.$notification.class);
- if (null != jVppNotificationCallback) {
- (($plugin_package.$callback_package.$callback) registeredCallbacks
- .get($plugin_package.$dto_package.$notification.class))
- .on$notification(notification);
- }
- }
-""")
-
-notification_provider_template = Template("""
-package $plugin_package.$notification_package;
-
- /**
- * Provides ${plugin_name}NotificationRegistry.
- * <br>The file was generated by notification_gen.py based on $inputfile
- * <br>(python representation of api file generated by vppapigen).
- */
-public interface ${plugin_name}NotificationRegistryProvider extends $base_package.$notification_package.NotificationRegistryProvider {
-
- @Override
- public ${plugin_name}NotificationRegistry getNotificationRegistry();
-}
-""")
-
-
-def generate_notification_registry(func_list, base_package, plugin_package, plugin_name, notification_package, callback_package, dto_package, inputfile):
- """ Generates notification registry interface and implementation """
- print "Generating Notification interfaces and implementation"
-
- if not os.path.exists(notification_package):
- raise Exception("%s folder is missing" % notification_package)
-
- callbacks = []
- register_callback_methods = []
- register_callback_methods_impl = []
- handler_methods = []
- for func in func_list:
-
- if not util.is_notification(func['name']):
- continue
-
- camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
- notification_dto = util.add_notification_suffix(camel_case_name_with_suffix)
- callback_ifc = notification_dto + callback_gen.callback_suffix
- fully_qualified_callback_ifc = "{0}.{1}.{2}".format(plugin_package, callback_package, callback_ifc)
- callbacks.append(fully_qualified_callback_ifc)
-
- # TODO create NotificationListenerRegistration and return that instead of AutoCloseable to better indicate
- # that the registration should be closed
- register_callback_methods.append("java.lang.AutoCloseable register{0}({1} callback);"
- .format(callback_ifc, fully_qualified_callback_ifc))
- register_callback_methods_impl.append(register_callback_impl_template.substitute(plugin_package=plugin_package,
- callback_package=callback_package,
- dto_package=dto_package,
- notification=notification_dto,
- callback=callback_ifc))
- handler_methods.append(handler_impl_template.substitute(base_package=base_package,
- plugin_package=plugin_package,
- callback_package=callback_package,
- dto_package=dto_package,
- notification=notification_dto,
- callback=callback_ifc))
-
-
- callback_file = open(os.path.join(notification_package, "%sNotificationRegistry.java" % plugin_name), 'w')
- callback_file.write(notification_registry_template.substitute(inputfile=inputfile,
- register_callback_methods="\n ".join(register_callback_methods),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- notification_package=notification_package))
- callback_file.flush()
- callback_file.close()
-
- callback_file = open(os.path.join(notification_package, "Global%sNotificationCallback.java" % plugin_name), 'w')
-
- global_notification_callback_callbacks = ""
- if (callbacks):
- global_notification_callback_callbacks = " extends " + ", ".join(callbacks)
-
- callback_file.write(global_notification_callback_template.substitute(inputfile=inputfile,
- callbacks=global_notification_callback_callbacks,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- notification_package=notification_package))
- callback_file.flush()
- callback_file.close()
-
- callback_file = open(os.path.join(notification_package, "%sNotificationRegistryImpl.java" % plugin_name), 'w')
- callback_file.write(notification_registry_impl_template.substitute(inputfile=inputfile,
- callback_package=callback_package,
- dto_package=dto_package,
- register_callback_methods="".join(register_callback_methods_impl),
- handler_methods="".join(handler_methods),
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- notification_package=notification_package))
- callback_file.flush()
- callback_file.close()
-
- callback_file = open(os.path.join(notification_package, "%sNotificationRegistryProvider.java" % plugin_name), 'w')
- callback_file.write(notification_provider_template.substitute(inputfile=inputfile,
- base_package=base_package,
- plugin_package=plugin_package,
- plugin_name=plugin_name,
- notification_package=notification_package))
- callback_file.flush()
- callback_file.close()
-
diff --git a/vpp-api/java/jvpp/gen/jvppgen/types_gen.py b/vpp-api/java/jvpp/gen/jvppgen/types_gen.py
deleted file mode 100644
index d12fb3d7850..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/types_gen.py
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os
-from string import Template
-
-import util
-import jni_gen
-import dto_gen
-
-type_template = Template("""
-package $plugin_package.$type_package;
-
-/**
- * <p>This class represents $c_type_name type definition.
- * <br>It was generated by types_gen.py based on $inputfile preparsed data:
- * <pre>
-$docs
- * </pre>
- */
-public final class $java_type_name {
-$fields
-$methods
-}
-""")
-
-field_template = Template(""" public $type $name;\n""")
-
-
-def generate_type_fields(type_definition):
- """
- Generates fields for class representing typeonly definition
- :param type_definition: python representation of typeonly definition
- :return: string representing class fields
- """
- fields = ""
- for t in zip(type_definition['types'], type_definition['args']):
- field_name = util.underscore_to_camelcase(t[1])
- fields += field_template.substitute(type=util.jni_2_java_type_mapping[t[0]],
- name=field_name)
- return fields
-
-object_struct_setter_template = Template("""
- {
- jclass ${field_reference_name}Class = (*env)->FindClass(env, "${class_FQN}");
- memset (&(mp->${c_name}), 0, sizeof (mp->${c_name}));
- ${struct_initialization}
- }
-""")
-
-object_array_struct_setter_template = Template("""
- {
- jclass ${field_reference_name}ArrayElementClass = (*env)->FindClass(env, "${class_FQN}");
- if (${field_reference_name}) {
- size_t _i;
- jsize cnt = (*env)->GetArrayLength (env, ${field_reference_name});
- ${field_length_check}
- for (_i = 0; _i < cnt; _i++) {
- jobject ${field_reference_name}ArrayElement = (*env)->GetObjectArrayElement(env, ${field_reference_name}, _i);
- memset (&(mp->${c_name}[_i]), 0, sizeof (mp->${c_name}[_i]));
- ${struct_initialization}
- }
- }
- }
-""")
-
-object_dto_field_setter_template = Template("""
- {
- jclass ${field_reference_name}Class = (*env)->FindClass(env, "${class_FQN}");
- jmethodID ${field_reference_name}Constructor = (*env)->GetMethodID(env, ${field_reference_name}Class, "<init>", "()V");
- jobject ${field_reference_name} = (*env)->NewObject(env, ${field_reference_name}Class, ${field_reference_name}Constructor);
- ${type_initialization}
- (*env)->SetObjectField(env, dto, ${field_reference_name}FieldId, ${field_reference_name});
- }
-""")
-
-object_array_dto_field_setter_template = Template("""
- {
- jclass ${field_reference_name}Class = (*env)->FindClass(env, "${class_FQN}");
- jobjectArray ${field_reference_name} = (*env)->NewObjectArray(env, ${field_length}, ${field_reference_name}Class, 0);
- unsigned int _i;
- for (_i = 0; _i < ${field_length}; _i++) {
- jmethodID ${field_reference_name}Constructor = (*env)->GetMethodID(env, ${field_reference_name}Class, "<init>", "()V");
- jobject ${field_reference_name}ArrayElement = (*env)->NewObject(env, ${field_reference_name}Class, ${field_reference_name}Constructor);
- ${type_initialization}
- (*env)->SetObjectArrayElement(env, ${field_reference_name}, _i, ${field_reference_name}ArrayElement);
- }
- (*env)->SetObjectField(env, dto, ${field_reference_name}FieldId, ${field_reference_name});
- }
-""")
-
-
-def generate_struct_initialization(type_def, c_name_prefix, object_name, indent):
- struct_initialization = ""
- # field identifiers
- for t in zip(type_def['types'], type_def['args'], type_def['lengths']):
- field_reference_name = "${c_name}" + util.underscore_to_camelcase_upper(t[1])
- field_name = util.underscore_to_camelcase(t[1])
- struct_initialization += jni_gen.jni_request_binding_for_type(field_type=t[0], c_name=c_name_prefix + t[1],
- field_reference_name=field_reference_name,
- field_name=field_name,
- field_length=t[2][0],
- is_variable_len_array=t[2][1],
- object_name=object_name)
- return indent + struct_initialization.replace('\n', '\n' + indent)
-
-
-def generate_type_setter(handler_name, type_def, c_name_prefix, object_name, indent):
- type_initialization = ""
- for t in zip(type_def['types'], type_def['args'], type_def['lengths']):
- field_length = t[2][0]
- is_variable_len_array = t[2][1]
- length_field_type = None
- if is_variable_len_array:
- length_field_type = type_def['types'][type_def['args'].index(field_length)]
- type_initialization += jni_gen.jni_reply_handler_for_type(handler_name=handler_name,
- ref_name="${field_reference_name}",
- field_type=t[0], c_name=c_name_prefix + t[1],
- field_reference_name="${c_name}" + util.underscore_to_camelcase_upper(t[1]),
- field_name=util.underscore_to_camelcase(t[1]),
- field_length=field_length,
- is_variable_len_array=is_variable_len_array,
- length_field_type=length_field_type,
- object_name=object_name)
- return indent + type_initialization.replace('\n', '\n' + indent)
-
-
-def generate_types(types_list, plugin_package, types_package, inputfile):
- """
- Generates Java representation of custom types defined in api file.
- """
-
- #
- if not types_list:
- print "Skipping custom types generation (%s does not define custom types)." % inputfile
- return
-
- print "Generating custom types"
-
- if not os.path.exists(types_package):
- raise Exception("%s folder is missing" % types_package)
-
- for type in types_list:
- c_type_name = type['name']
- java_type_name = util.underscore_to_camelcase_upper(type['name'])
- dto_path = os.path.join(types_package, java_type_name + ".java")
-
- fields = generate_type_fields(type)
-
- dto_file = open(dto_path, 'w')
- dto_file.write(type_template.substitute(plugin_package=plugin_package,
- type_package=types_package,
- c_type_name=c_type_name,
- inputfile=inputfile,
- docs=util.api_message_to_javadoc(type),
- java_type_name=java_type_name,
- fields=fields,
- methods=dto_gen.generate_dto_base_methods(java_type_name, type)
- ))
-
- # update type mappings:
- # todo fix vpe.api to use type_name instead of vl_api_type_name_t
- type_name = "vl_api_" + c_type_name + "_t"
- java_fqn = "%s.%s.%s" % (plugin_package, types_package, java_type_name)
- util.vpp_2_jni_type_mapping[type_name] = "jobject"
- util.vpp_2_jni_type_mapping[type_name + "[]"] = "jobjectArray"
- util.jni_2_java_type_mapping[type_name] = java_fqn
- util.jni_2_java_type_mapping[type_name + "[]"] = java_fqn + "[]"
- jni_name = java_fqn.replace('.', "/")
- jni_signature = "L" + jni_name + ";"
- util.jni_2_signature_mapping[type_name] = "L" + jni_name + ";"
- util.jni_2_signature_mapping[type_name + "[]"] = "[" + jni_signature
- util.jni_field_accessors[type_name] = "ObjectField"
- util.jni_field_accessors[type_name + "[]"] = "ObjectField"
-
- jni_gen.struct_setter_templates[type_name] = Template(
- object_struct_setter_template.substitute(
- c_name="${c_name}",
- field_reference_name="${field_reference_name}",
- class_FQN=jni_name,
- struct_initialization=generate_struct_initialization(type, "${c_name}.",
- "${field_reference_name}", ' ' * 4))
- )
-
- jni_gen.struct_setter_templates[type_name+ "[]"] = Template(
- object_array_struct_setter_template.substitute(
- c_name="${c_name}",
- field_reference_name="${field_reference_name}",
- field_length_check="${field_length_check}",
- class_FQN=jni_name,
- struct_initialization=generate_struct_initialization(type, "${c_name}[_i].",
- "${field_reference_name}ArrayElement", ' ' * 8))
- )
-
- jni_gen.dto_field_setter_templates[type_name] = Template(
- object_dto_field_setter_template.substitute(
- field_reference_name="${field_reference_name}",
- field_length="${field_length}",
- class_FQN=jni_name,
- type_initialization=generate_type_setter(c_type_name, type, "${c_name}.",
- "${field_reference_name}", ' ' * 4))
- )
-
- jni_gen.dto_field_setter_templates[type_name + "[]"] = Template(
- object_array_dto_field_setter_template.substitute(
- field_reference_name="${field_reference_name}",
- field_length="${field_length}",
- class_FQN=jni_name,
- type_initialization=generate_type_setter(c_type_name, type, "${c_name}[_i].",
- "${field_reference_name}ArrayElement", ' ' * 8))
- )
-
- dto_file.flush()
- dto_file.close()
-
diff --git a/vpp-api/java/jvpp/gen/jvppgen/util.py b/vpp-api/java/jvpp/gen/jvppgen/util.py
deleted file mode 100644
index fc971c176d5..00000000000
--- a/vpp-api/java/jvpp/gen/jvppgen/util.py
+++ /dev/null
@@ -1,220 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-import os, pprint
-from os import removedirs
-
-
-def underscore_to_camelcase(name):
- name = name.title().replace("_", "")
- return name[0].lower() + name[1:]
-
-
-def underscore_to_camelcase_upper(name):
- name = name.title().replace("_", "")
- return name[0].upper() + name[1:]
-
-
-def remove_folder(folder):
- """ Remove folder with all its files """
- for root, dirs, files in os.walk(folder, topdown=False):
- for name in files:
- os.remove(os.path.join(root, name))
- removedirs(folder)
-
-
-reply_suffixes = ("reply", "details", "l2fibtableentry")
-
-
-def is_reply(name):
- return name.lower().endswith(reply_suffixes)
-
-
-def is_details(name):
- return name.lower().endswith(reply_suffixes[1]) or name.lower().endswith(reply_suffixes[2])
-
-
-def is_retval_field(name):
- return name == 'retval'
-
-dump_suffix = "dump"
-
-
-def is_dump(name):
- return name.lower().endswith(dump_suffix)
-
-
-def get_reply_suffix(name):
- for reply_suffix in reply_suffixes:
- if name.lower().endswith(reply_suffix):
- if reply_suffix == reply_suffixes[2]:
- # FIXME workaround for l2_fib_table_entry
- return 'entry'
- else:
- return reply_suffix
-
-# Mapping according to:
-# http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html
-#
-# Unsigned types are converted to signed java types that have the same size.
-# It is the API user responsibility to interpret them correctly.
-jni_2_java_type_mapping = {'u8': 'byte',
- 'u8[]': 'byte[]',
- 'i8': 'byte',
- 'i8[]': 'byte[]',
- 'u16': 'short',
- 'u16[]': 'short[]',
- 'i16': 'short',
- 'i16[]': 'short[]',
- 'u32': 'int',
- 'u32[]': 'int[]',
- 'i32': 'int',
- 'i32[]': 'int[]',
- 'u64': 'long',
- 'u64[]': 'long[]',
- 'i64': 'long',
- 'i64[]': 'long[]',
- 'f64': 'double',
- 'f64[]': 'double[]'
- }
-
-vpp_2_jni_type_mapping = {'u8': 'jbyte',
- 'u8[]': 'jbyteArray',
- 'i8': 'jbyte',
- 'u8[]': 'jbyteArray',
- 'u16': 'jshort',
- 'u16[]': 'jshortArray',
- 'i16': 'jshort',
- 'i16[]': 'jshortArray',
- 'u32': 'jint',
- 'u32[]': 'jintArray',
- 'i32': 'jint',
- 'i32[]': 'jintArray',
- 'u64': 'jlong',
- 'u64[]': 'jlongArray',
- 'i64': 'jlong',
- 'i64[]': 'jlongArray',
- 'f64': 'jdouble',
- 'f64[]': 'jdoubleArray'
- }
-
-# https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/types.html#type_signatures
-jni_2_signature_mapping = {'u8': 'B',
- 'u8[]': '[B',
- 'i8': 'B',
- 'i8[]': '[B',
- 'u16': 'S',
- 'u16[]': '[S',
- 'i16': 'S',
- 'i16[]': '[S',
- 'u32': 'I',
- 'u32[]': '[I',
- 'i32': 'I',
- 'i32[]': '[I',
- 'u64': 'J',
- 'u64[]': '[J',
- 'i64': 'J',
- 'i64[]': '[J',
- 'f64': 'D',
- 'f64[]': '[D'
- }
-
-# https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#Get_type_Field_routines
-jni_field_accessors = {'u8': 'ByteField',
- 'u8[]': 'ObjectField',
- 'i8': 'ByteField',
- 'i8[]': 'ObjectField',
- 'u16': 'ShortField',
- 'u16[]': 'ObjectField',
- 'i16': 'ShortField',
- 'i16[]': 'ObjectField',
- 'u32': 'IntField',
- 'u32[]': 'ObjectField',
- 'i32': 'IntField',
- 'i32[]': 'ObjectField',
- 'u64': 'LongField',
- 'u64[]': 'ObjectField',
- 'i64': 'LongField',
- 'i64[]': 'ObjectField',
- 'f64': 'DoubleField',
- 'f64[]': 'ObjectField'
- }
-
-
-# vpe.api calls that do not follow naming conventions and have to be handled exceptionally when finding reply -> request mapping
-# FIXME in vpe.api
-unconventional_naming_rep_req = {
- 'cli_reply': 'cli_request',
- 'vnet_summary_stats_reply': 'vnet_get_summary_stats',
- # This below is actually a sub-details callback. We cannot derive the mapping of dump request
- # belonging to this sub-details from naming conventions. We need special mapping
- 'bridge_domain_sw_if_details': 'bridge_domain',
- # This is standard dump call + details reply. However it's not called details but entry
- 'l2_fib_table_entry': 'l2_fib_table'
- }
-
-#
-# FIXME no convention in the naming of events (notifications) in vpe.api
-notifications_message_suffixes = ("event", "counters")
-notification_messages_reused = ["sw_interface_set_flags"]
-
-# messages that must be ignored. These messages are INSUFFICIENTLY marked as disabled in vpe.api
-# FIXME
-ignored_messages = ["is_address_reachable"]
-
-
-def is_notification(name):
- """ Returns true if the structure is a notification regardless of its no other use """
- return is_just_notification(name) or name.lower() in notification_messages_reused
-
-
-def is_just_notification(name):
- """ Returns true if the structure is just a notification and has no other use """
- return name.lower().endswith(notifications_message_suffixes)
-
-
-def is_ignored(param):
- return param.lower() in ignored_messages
-
-
-def remove_reply_suffix(camel_case_name_with_suffix):
- return remove_suffix(camel_case_name_with_suffix, get_reply_suffix(camel_case_name_with_suffix))
-
-
-def remove_suffix(camel_case_name_with_suffix, suffix):
- suffix_length = len(suffix)
- return camel_case_name_with_suffix[:-suffix_length] if suffix_length != 0 else camel_case_name_with_suffix
-
-
-def is_control_ping(camel_case_name_with_suffix):
- return camel_case_name_with_suffix.lower().startswith("controlping");
-
-
-def api_message_to_javadoc(api_message):
- """ Converts vpe.api message description to javadoc """
- str = pprint.pformat(api_message, indent=4, width=120, depth=None)
- return " * " + str.replace("\n", "\n * ")
-
-
-notification_dto_suffix = "Notification"
-
-
-def add_notification_suffix(camel_case_dto_name):
- camel_case_dto_name += notification_dto_suffix
- return camel_case_dto_name
-
-
-def is_array(java_type_as_string):
- return java_type_as_string.endswith("[]")
diff --git a/vpp-api/java/m4/ax_check_java_home.m4 b/vpp-api/java/m4/ax_check_java_home.m4
deleted file mode 100644
index cfe8f58928d..00000000000
--- a/vpp-api/java/m4/ax_check_java_home.m4
+++ /dev/null
@@ -1,80 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_check_java_home.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_CHECK_JAVA_HOME
-#
-# DESCRIPTION
-#
-# Check for Sun Java (JDK / JRE) installation, where the 'java' VM is in.
-# If found, set environment variable JAVA_HOME = Java installation home,
-# else left JAVA_HOME untouch, which in most case means JAVA_HOME is
-# empty.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Gleen Salmon <gleensalmon@yahoo.com>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 6
-
-AU_ALIAS([AC_CHECK_JAVA_HOME], [AX_CHECK_JAVA_HOME])
-
-AC_DEFUN([AX_CHECK_JAVA_HOME],
-[AC_MSG_CHECKING([for JAVA_HOME])
-# We used a fake loop so that we can use "break" to exit when the result
-# is found.
-while true
-do
- # If the user defined JAVA_HOME, don't touch it.
- test "${JAVA_HOME+set}" = set && break
-
- # On Mac OS X 10.5 and following, run /usr/libexec/java_home to get
- # the value of JAVA_HOME to use.
- # (http://developer.apple.com/library/mac/#qa/qa2001/qa1170.html).
- JAVA_HOME=`/usr/libexec/java_home 2>/dev/null`
- test x"$JAVA_HOME" != x && break
-
- # See if we can find the java executable, and compute from there.
- TRY_JAVA_HOME=`ls -dr /usr/java/* 2> /dev/null | head -n 1`
- if test x$TRY_JAVA_HOME != x; then
- PATH=$PATH:$TRY_JAVA_HOME/bin
- fi
- AC_PATH_PROG([JAVA_PATH_NAME], [java])
- if test "x$JAVA_PATH_NAME" != x; then
- JAVA_HOME=`echo $JAVA_PATH_NAME | sed "s/\(.*\)[[/]]bin[[/]]java.*/\1/"`
- break
- fi
-
- AC_MSG_NOTICE([Could not compute JAVA_HOME])
- break
-done
-AC_MSG_RESULT([$JAVA_HOME])
-])
diff --git a/vpp-api/java/m4/ax_check_java_plugin.m4 b/vpp-api/java/m4/ax_check_java_plugin.m4
deleted file mode 100644
index 920753e5724..00000000000
--- a/vpp-api/java/m4/ax_check_java_plugin.m4
+++ /dev/null
@@ -1,101 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_check_java_plugin.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_CHECK_JAVA_PLUGIN(<shell-variable>)
-#
-# DESCRIPTION
-#
-# This macro sets <shell-variable> to empty on failure and to a compatible
-# version of plugin.jar otherwise. Directories searched are /usr/java/*
-# and /usr/local/java/*, which are assumed to be j{dk,re} installations.
-# Apply the shell variable as you see fit. If sun changes things so
-# <jre>/lib/plugin.jar is not the magic file it will stop working.
-#
-# This macro assumes that unzip, zipinfo or pkzipc is available (and can
-# list the contents of the jar archive). The first two are assumed to work
-# similarly enough to the infozip versisonms. The pkzipc version is
-# assumed to work if I undertstand the documentation on pkware's site but
-# YMMV. I do not have access to pwkware's version to test it.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Duncan Simpson <dps@simpson.demon.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 7
-
-AU_ALIAS([DPS_CHECK_PLUGIN], [AX_CHECK_JAVA_PLUGIN])
-AC_DEFUN([AX_CHECK_JAVA_PLUGIN],
-[AC_REQUIRE([AC_PROG_AWK])
-AC_REQUIRE([AC_PROG_FGREP])
-AC_CHECK_PROG(ZIPINFO,[zipinfo unzip pkzipc])
-AC_MSG_CHECKING([for the java plugin])
-case "x$ZIPINFO" in
-[*/zipinfo)]
- zipinf="zipinfo -1" ;;
-[*/unzip)]
- zipinf="unzip -l";;
-[*/pkzipc)]
- ziping="unzipc -view";;
-[x*)]
- AC_MSG_RESULT([skiped, none of zipinfo, unzip and pkzipc found])
- AC_SUBST($1,[])
- zipinf="";;
-esac
-if test "x$zipinf" != "x"; then
-jplugin=""
-for jhome in `ls -dr /usr/java/* /usr/local/java/* 2> /dev/null`; do
-for jfile in lib/plugin.jar jre/lib/plugin.jar; do
-if test "x$jplugin" = "x" && test -f "$jhome/$jfile"; then
-eval "$zipinf $jhome/$jfile | $AWK '{ print \$NF; }' | $FGREP netscape/javascript/JSObject" >/dev/null 2>/dev/null
-if test $? -eq 0; then
-dnl Some version of gcj (and javac) refuse to work with some files
-dnl that pass this test. To stop this problem make sure that the compiler
-dnl still works with this jar file in the classpath
-cat << \EOF > Test.java
-/* [#]line __oline__ "configure" */
-public class Test {
-}
-EOF
-if eval "$JAVAC -classpath $jhome/$jfile Test.java 2>/dev/null >/dev/null" && test -f Test.class; then
-jplugin="$jhome/$jfile"
-fi
-rm -f Test.java Test.class
-fi; fi; done; done
-if test "x$jplugin" != "x"; then
-AC_SUBST($1,$jplugin)
-AC_MSG_RESULT($jplugin)
-else
-AC_MSG_RESULT([java plugin not found])
-AC_SUBST($1,[])
-fi
-fi
-])
diff --git a/vpp-api/java/m4/ax_java_check_class.m4 b/vpp-api/java/m4/ax_java_check_class.m4
deleted file mode 100644
index 917638ae4b9..00000000000
--- a/vpp-api/java/m4/ax_java_check_class.m4
+++ /dev/null
@@ -1,85 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_java_check_class.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_JAVA_CHECK_CLASS(<class>,<action-if-found>,<action-if-not-found>)
-#
-# DESCRIPTION
-#
-# Test if a Java class is available. Based on AX_PROG_JAVAC_WORKS. This
-# version uses a cache variable which is both compiler, options and
-# classpath dependent (so if you switch from javac to gcj it correctly
-# notices and redoes the test).
-#
-# The macro tries to compile a minimal program importing <class>. Some
-# newer compilers moan about the failure to use this but fail or produce a
-# class file anyway. All moaing is sunk to /dev/null since I only wanted
-# to know if the class could be imported. This is a recommended followup
-# to AX_CHECK_JAVA_PLUGIN with classpath appropriately adjusted.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Duncan Simpson <dps@simpson.demon.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 9
-
-AU_ALIAS([DPS_JAVA_CHECK_CLASS], [AX_JAVA_CHECK_CLASS])
-AC_DEFUN([AX_JAVA_CHECK_CLASS],[
-m4_define([cache_val],[m4_translit(ax_cv_have_java_class_$1, " ." ,"__")])
-if test "x$CLASSPATH" != "x"; then
-xtra=" with classpath ${CLASSPATH}"
-xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'`
-xopts="-classpath $xopts"
-else xtra=""; xopts=""; fi
-cache_var="cache_val"AS_TR_SH([_Jc_${JAVAC}_Cp_${CLASSPATH}])
-AC_CACHE_CHECK([if the $1 class is available$xtra], [$cache_var], [
-JAVA_TEST=Test.java
-CLASS_TEST=Test.class
-cat << \EOF > $JAVA_TEST
-/* [#]xline __oline__ "configure" */
-import $1;
-public class Test {
-}
-EOF
-if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $xopts $JAVA_TEST) >/dev/null 2>&1; then
- eval "${cache_var}=yes"
-else
- eval "${cache_var}=no"
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
-fi
-rm -f $JAVA_TEST $CLASS_TEST
-])
-if eval 'test "x$'${cache_var}'" = "xyes"'; then
-$2
-true; else
-$3
-false; fi])
diff --git a/vpp-api/java/m4/ax_java_options.m4 b/vpp-api/java/m4/ax_java_options.m4
deleted file mode 100644
index 36c10d922bd..00000000000
--- a/vpp-api/java/m4/ax_java_options.m4
+++ /dev/null
@@ -1,48 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_java_options.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_JAVA_OPTIONS
-#
-# DESCRIPTION
-#
-# AX_JAVA_OPTIONS adds configure command line options used for Java m4
-# macros. This Macro is optional.
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission. The
-# general documentation, as well as the sample configure.in, is included
-# in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Devin Weaver <ktohg@tritarget.com>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 6
-
-AU_ALIAS([AC_JAVA_OPTIONS], [AX_JAVA_OPTIONS])
-AC_DEFUN([AX_JAVA_OPTIONS],[
-AC_ARG_WITH(java-prefix,
- [ --with-java-prefix=PFX prefix where Java runtime is installed (optional)])
-AC_ARG_WITH(javac-flags,
- [ --with-javac-flags=FLAGS flags to pass to the Java compiler (optional)])
-AC_ARG_WITH(java-flags,
- [ --with-java-flags=FLAGS flags to pass to the Java VM (optional)])
-JAVAPREFIX=$with_java_prefix
-JAVACFLAGS=$with_javac_flags
-JAVAFLAGS=$with_java_flags
-AC_SUBST(JAVAPREFIX)dnl
-AC_SUBST(JAVACFLAGS)dnl
-AC_SUBST(JAVAFLAGS)dnl
-AC_SUBST(JAVA)dnl
-AC_SUBST(JAVAC)dnl
-])
diff --git a/vpp-api/java/m4/ax_libgcj_jar.m4 b/vpp-api/java/m4/ax_libgcj_jar.m4
deleted file mode 100644
index 5e942857265..00000000000
--- a/vpp-api/java/m4/ax_libgcj_jar.m4
+++ /dev/null
@@ -1,83 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_libgcj_jar.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_LIBGCJ_JAR
-#
-# DESCRIPTION
-#
-# Locate libgcj.jar so you can place it before everything else when using
-# gcj.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Duncan Simpson <dps@simpson.demon.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 9
-
-AU_ALIAS([DPS_LIBGCJ_JAR], [AX_LIBGCJ_JAR])
-AC_DEFUN([AX_LIBGCJ_JAR],
-[
-AC_REQUIRE([AC_EXEEXT])
-AC_REQUIRE([AX_PROG_JAVAC])
-AC_REQUIRE([AC_PROG_FGREP])
-AC_PROG_SED
-if test "x$SED" = "x"; then
-AC_MSG_WARN([sed not avaiable, so libgcj.jar test skipped])
-else
-AC_MSG_CHECKING([if $JAVAC is gcj]);
-jc=`eval "[echo x$JAVAC | $SED 's/^x.*\\/\\([^/]*\\)\$/x\\1/;s/^ *\\([^ ]*\\) .*$/\\1/;s/"$EXEEXT"$//']"`
-if test "x$jc" != "xxgcj"; then
-AC_MSG_RESULT(no)
-else
-AC_MSG_RESULT(yes)
-AC_MSG_CHECKING([libgcj.jar location])
-save_cp="$CLASSPATH";
-unset CLASSPATH;
-AC_MSG_CHECKING([gcj default classpath])
-cat << \EOF > Test.java
-/* [#]line __oline__ "configure" */
-public class Test {
-}
-EOF
-lgcj=`eval "[$JAVAC -v -C Test.java 2>&1 | $FGREP \\(system\\) | $SED 's/^ *\\([^ ]*\\) .*$/\\1/;s/\\.jar\\//.jar/']"`;
-if test -f Test.class && test "x$lgcj" != "x"; then
-AC_MSG_RESULT($lgcj)
-$1="$lgcj:"
-else
-AC_MSG_RESULT(failed)
-$1=""
-fi
-if test "x$save_cp" != "x"; then CLASSPATH="$save_cp"; fi
-rm -f Test.java Test.class
-fi
-fi
-])
diff --git a/vpp-api/java/m4/ax_prog_jar.m4 b/vpp-api/java/m4/ax_prog_jar.m4
deleted file mode 100644
index 3c60fcaf2d4..00000000000
--- a/vpp-api/java/m4/ax_prog_jar.m4
+++ /dev/null
@@ -1,49 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_jar.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAR
-#
-# DESCRIPTION
-#
-# AX_PROG_JAR tests for an existing jar program. It uses the environment
-# variable JAR then tests in sequence various common jar programs.
-#
-# If you want to force a specific compiler:
-#
-# - at the configure.in level, set JAR=yourcompiler before calling
-# AX_PROG_JAR
-#
-# - at the configure level, setenv JAR
-#
-# You can use the JAR variable in your Makefile.in, with @JAR@.
-#
-# Note: This macro depends on the autoconf M4 macros for Java programs. It
-# is VERY IMPORTANT that you download that whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission.
-#
-# The general documentation of those macros, as well as the sample
-# configure.in, is included in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Egon Willighagen <e.willighagen@science.ru.nl>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 7
-
-AU_ALIAS([AC_PROG_JAR], [AX_PROG_JAR])
-AC_DEFUN([AX_PROG_JAR],[
-AS_IF([test "x$JAVAPREFIX" = x],
- [test "x$JAR" = x && AC_CHECK_PROGS([JAR], [jar])],
- [test "x$JAR" = x && AC_CHECK_PROGS([JAR], [jar], [], [$JAVAPREFIX/bin])])
-test "x$JAR" = x && AC_MSG_ERROR([no acceptable jar program found in \$PATH])
-AC_PROVIDE([$0])dnl
-])
diff --git a/vpp-api/java/m4/ax_prog_java.m4 b/vpp-api/java/m4/ax_prog_java.m4
deleted file mode 100644
index 03961db5b73..00000000000
--- a/vpp-api/java/m4/ax_prog_java.m4
+++ /dev/null
@@ -1,115 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_java.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVA
-#
-# DESCRIPTION
-#
-# Here is a summary of the main macros:
-#
-# AX_PROG_JAVAC: finds a Java compiler.
-#
-# AX_PROG_JAVA: finds a Java virtual machine.
-#
-# AX_CHECK_CLASS: finds if we have the given class (beware of CLASSPATH!).
-#
-# AX_CHECK_RQRD_CLASS: finds if we have the given class and stops
-# otherwise.
-#
-# AX_TRY_COMPILE_JAVA: attempt to compile user given source.
-#
-# AX_TRY_RUN_JAVA: attempt to compile and run user given source.
-#
-# AX_JAVA_OPTIONS: adds Java configure options.
-#
-# AX_PROG_JAVA tests an existing Java virtual machine. It uses the
-# environment variable JAVA then tests in sequence various common Java
-# virtual machines. For political reasons, it starts with the free ones.
-# You *must* call [AX_PROG_JAVAC] before.
-#
-# If you want to force a specific VM:
-#
-# - at the configure.in level, set JAVA=yourvm before calling AX_PROG_JAVA
-#
-# (but after AC_INIT)
-#
-# - at the configure level, setenv JAVA
-#
-# You can use the JAVA variable in your Makefile.in, with @JAVA@.
-#
-# *Warning*: its success or failure can depend on a proper setting of the
-# CLASSPATH env. variable.
-#
-# TODO: allow to exclude virtual machines (rationale: most Java programs
-# cannot run with some VM like kaffe).
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission.
-#
-# A Web page, with a link to the latest CVS snapshot is at
-# <http://www.internatif.org/bortzmeyer/autoconf-Java/>.
-#
-# This is a sample configure.in Process this file with autoconf to produce
-# a configure script.
-#
-# AC_INIT(UnTag.java)
-#
-# dnl Checks for programs.
-# AC_CHECK_CLASSPATH
-# AX_PROG_JAVAC
-# AX_PROG_JAVA
-#
-# dnl Checks for classes
-# AX_CHECK_RQRD_CLASS(org.xml.sax.Parser)
-# AX_CHECK_RQRD_CLASS(com.jclark.xml.sax.Driver)
-#
-# AC_OUTPUT(Makefile)
-#
-# LICENSE
-#
-# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 9
-
-AU_ALIAS([AC_PROG_JAVA], [AX_PROG_JAVA])
-AC_DEFUN([AX_PROG_JAVA],[
-m4_define([m4_ax_prog_java_list], [kaffe java])dnl
-AS_IF([test "x$JAVAPREFIX" = x],
- [test x$JAVA = x && AC_CHECK_PROGS([JAVA], [m4_ax_prog_java_list])],
- [test x$JAVA = x && AC_CHECK_PROGS([JAVA], [m4_ax_prog_java_list], [], [$JAVAPREFIX/bin])])
-test x$JAVA = x && AC_MSG_ERROR([no acceptable Java virtual machine found in \$PATH])
-m4_undefine([m4_ax_prog_java_list])dnl
-AX_PROG_JAVA_WORKS
-AC_PROVIDE([$0])dnl
-])
diff --git a/vpp-api/java/m4/ax_prog_java_cc.m4 b/vpp-api/java/m4/ax_prog_java_cc.m4
deleted file mode 100644
index 3df064ff663..00000000000
--- a/vpp-api/java/m4/ax_prog_java_cc.m4
+++ /dev/null
@@ -1,104 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_java_cc.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVA_CC
-#
-# DESCRIPTION
-#
-# Finds the appropriate java compiler on your path. By preference the java
-# compiler is gcj, then jikes then javac.
-#
-# The macro can take one argument specifying a space separated list of
-# java compiler names.
-#
-# For example:
-#
-# AX_PROG_JAVA_CC(javac, gcj)
-#
-# The macro also sets the compiler options variable: JAVA_CC_OPTS to
-# something sensible:
-#
-# - for GCJ it sets it to: @GCJ_OPTS@
-# (if GCJ_OPTS is not yet defined then it is set to "-C")
-#
-# - no other compiler has applicable options yet
-#
-# Here's an example configure.in:
-#
-# AC_INIT(Makefile.in)
-# AX_PROG_JAVA_CC()
-# AC_OUTPUT(Makefile)
-# dnl End.
-#
-# And here's the start of the Makefile.in:
-#
-# PROJECT_ROOT := @srcdir@
-# # Tool definitions.
-# JAVAC := @JAVA_CC@
-# JAVAC_OPTS := @JAVA_CC_OPTS@
-# JAR_TOOL := @jar_tool@
-#
-# LICENSE
-#
-# Copyright (c) 2008 Nic Ferrier <nferrier@tapsellferrier.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 4
-
-# AX_PROG_JAVA_CC([COMPILER ...])
-# --------------------------
-# COMPILER ... is a space separated list of java compilers to search for.
-# This just gives the user an opportunity to specify an alternative
-# search list for the java compiler.
-AU_ALIAS([AC_PROG_JAVA_CC], [AX_PROG_JAVA_CC])
-AC_DEFUN([AX_PROG_JAVA_CC],
-[AC_ARG_VAR([JAVA_CC], [java compiler command])dnl
-AC_ARG_VAR([JAVA_CC_FLAGS], [java compiler flags])dnl
-m4_ifval([$1],
- [AC_CHECK_TOOLS(JAVA_CC, [$1])],
-[AC_CHECK_TOOL(JAVA_CC, gcj)
-if test -z "$JAVA_CC"; then
- AC_CHECK_TOOL(JAVA_CC, javac)
-fi
-if test -z "$JAVA_CC"; then
- AC_CHECK_TOOL(JAVA_CC, jikes)
-fi
-])
-
-if test "$JAVA_CC" = "gcj"; then
- if test "$GCJ_OPTS" = ""; then
- AC_SUBST(GCJ_OPTS,-C)
- fi
- AC_SUBST(JAVA_CC_OPTS, @GCJ_OPTS@,
- [Define the compilation options for GCJ])
-fi
-test -z "$JAVA_CC" && AC_MSG_ERROR([no acceptable java compiler found in \$PATH])
-])# AX_PROG_JAVA_CC
diff --git a/vpp-api/java/m4/ax_prog_java_works.m4 b/vpp-api/java/m4/ax_prog_java_works.m4
deleted file mode 100644
index 54e132afae6..00000000000
--- a/vpp-api/java/m4/ax_prog_java_works.m4
+++ /dev/null
@@ -1,134 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_java_works.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVA_WORKS
-#
-# DESCRIPTION
-#
-# Internal use ONLY.
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission. The
-# general documentation, as well as the sample configure.in, is included
-# in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 9
-
-AU_ALIAS([AC_PROG_JAVA_WORKS], [AX_PROG_JAVA_WORKS])
-AC_DEFUN([AX_PROG_JAVA_WORKS], [
-AC_PATH_PROG(UUDECODE, uudecode, [no])
-if test x$UUDECODE != xno; then
-AC_CACHE_CHECK([if uudecode can decode base 64 file], ac_cv_prog_uudecode_base64, [
-dnl /**
-dnl * Test.java: used to test if java compiler works.
-dnl */
-dnl public class Test
-dnl {
-dnl
-dnl public static void
-dnl main( String[] argv )
-dnl {
-dnl System.exit (0);
-dnl }
-dnl
-dnl }
-cat << \EOF > Test.uue
-begin-base64 644 Test.class
-yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
-bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
-bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s
-YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG
-aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB
-AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB
-AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ=
-====
-EOF
-if $UUDECODE Test.uue; then
- ac_cv_prog_uudecode_base64=yes
-else
- echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AS_MESSAGE_LOG_FD
- echo "configure: failed file was:" >&AS_MESSAGE_LOG_FD
- cat Test.uue >&AS_MESSAGE_LOG_FD
- ac_cv_prog_uudecode_base64=no
-fi
-rm -f Test.uue])
-fi
-if test x$ac_cv_prog_uudecode_base64 != xyes; then
- rm -f Test.class
- AC_MSG_WARN([I have to compile Test.class from scratch])
- if test x$ac_cv_prog_javac_works = xno; then
- AC_MSG_ERROR([Cannot compile java source. $JAVAC does not work properly])
- fi
- if test x$ac_cv_prog_javac_works = x; then
- AX_PROG_JAVAC
- fi
-fi
-AC_CACHE_CHECK(if $JAVA works, ac_cv_prog_java_works, [
-JAVA_TEST=Test.java
-CLASS_TEST=Test.class
-TEST=Test
-changequote(, )dnl
-cat << \EOF > $JAVA_TEST
-/* [#]line __oline__ "configure" */
-public class Test {
-public static void main (String args[]) {
- System.exit (0);
-} }
-EOF
-changequote([, ])dnl
-if test x$ac_cv_prog_uudecode_base64 != xyes; then
- if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) && test -s $CLASS_TEST; then
- :
- else
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
- AC_MSG_ERROR(The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?))
- fi
-fi
-if AC_TRY_COMMAND($JAVA -classpath . $JAVAFLAGS $TEST) >/dev/null 2>&1; then
- ac_cv_prog_java_works=yes
-else
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
- AC_MSG_ERROR(The Java VM $JAVA failed (see config.log, check the CLASSPATH?))
-fi
-rm -fr $JAVA_TEST $CLASS_TEST Test.uue
-])
-AC_PROVIDE([$0])dnl
-]
-)
diff --git a/vpp-api/java/m4/ax_prog_javac.m4 b/vpp-api/java/m4/ax_prog_javac.m4
deleted file mode 100644
index d061243cdb0..00000000000
--- a/vpp-api/java/m4/ax_prog_javac.m4
+++ /dev/null
@@ -1,79 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_javac.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVAC
-#
-# DESCRIPTION
-#
-# AX_PROG_JAVAC tests an existing Java compiler. It uses the environment
-# variable JAVAC then tests in sequence various common Java compilers. For
-# political reasons, it starts with the free ones.
-#
-# If you want to force a specific compiler:
-#
-# - at the configure.in level, set JAVAC=yourcompiler before calling
-# AX_PROG_JAVAC
-#
-# - at the configure level, setenv JAVAC
-#
-# You can use the JAVAC variable in your Makefile.in, with @JAVAC@.
-#
-# *Warning*: its success or failure can depend on a proper setting of the
-# CLASSPATH env. variable.
-#
-# TODO: allow to exclude compilers (rationale: most Java programs cannot
-# compile with some compilers like guavac).
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission. The
-# general documentation, as well as the sample configure.in, is included
-# in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 7
-
-AU_ALIAS([AC_PROG_JAVAC], [AX_PROG_JAVAC])
-AC_DEFUN([AX_PROG_JAVAC],[
-m4_define([m4_ax_prog_javac_list],["gcj -C" guavac jikes javac])dnl
-AS_IF([test "x$JAVAPREFIX" = x],
- [test "x$JAVAC" = x && AC_CHECK_PROGS([JAVAC], [m4_ax_prog_javac_list])],
- [test "x$JAVAC" = x && AC_CHECK_PROGS([JAVAC], [m4_ax_prog_javac_list], [], [$JAVAPREFIX/bin])])
-m4_undefine([m4_ax_prog_javac_list])dnl
-test "x$JAVAC" = x && AC_MSG_ERROR([no acceptable Java compiler found in \$PATH])
-AX_PROG_JAVAC_WORKS
-AC_PROVIDE([$0])dnl
-])
diff --git a/vpp-api/java/m4/ax_prog_javac_works.m4 b/vpp-api/java/m4/ax_prog_javac_works.m4
deleted file mode 100644
index 7dfa1e37d89..00000000000
--- a/vpp-api/java/m4/ax_prog_javac_works.m4
+++ /dev/null
@@ -1,72 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_javac_works.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVAC_WORKS
-#
-# DESCRIPTION
-#
-# Internal use ONLY.
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission. The
-# general documentation, as well as the sample configure.in, is included
-# in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 6
-
-AU_ALIAS([AC_PROG_JAVAC_WORKS], [AX_PROG_JAVAC_WORKS])
-AC_DEFUN([AX_PROG_JAVAC_WORKS],[
-AC_CACHE_CHECK([if $JAVAC works], ac_cv_prog_javac_works, [
-JAVA_TEST=Test.java
-CLASS_TEST=Test.class
-cat << \EOF > $JAVA_TEST
-/* [#]line __oline__ "configure" */
-public class Test {
-}
-EOF
-if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) >/dev/null 2>&1; then
- ac_cv_prog_javac_works=yes
-else
- AC_MSG_ERROR([The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)])
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
-fi
-rm -f $JAVA_TEST $CLASS_TEST
-])
-AC_PROVIDE([$0])dnl
-])
diff --git a/vpp-api/java/m4/ax_prog_javadoc.m4 b/vpp-api/java/m4/ax_prog_javadoc.m4
deleted file mode 100644
index bcb6045a828..00000000000
--- a/vpp-api/java/m4/ax_prog_javadoc.m4
+++ /dev/null
@@ -1,50 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_javadoc.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVADOC
-#
-# DESCRIPTION
-#
-# AX_PROG_JAVADOC tests for an existing javadoc generator. It uses the
-# environment variable JAVADOC then tests in sequence various common
-# javadoc generator.
-#
-# If you want to force a specific compiler:
-#
-# - at the configure.in level, set JAVADOC=yourgenerator before calling
-# AX_PROG_JAVADOC
-#
-# - at the configure level, setenv JAVADOC
-#
-# You can use the JAVADOC variable in your Makefile.in, with @JAVADOC@.
-#
-# Note: This macro depends on the autoconf M4 macros for Java programs. It
-# is VERY IMPORTANT that you download that whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission.
-#
-# The general documentation of those macros, as well as the sample
-# configure.in, is included in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Egon Willighagen <e.willighagen@science.ru.nl>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 8
-
-AU_ALIAS([AC_PROG_JAVADOC], [AX_PROG_JAVADOC])
-AC_DEFUN([AX_PROG_JAVADOC],[
-AS_IF([test "x$JAVAPREFIX" = x],
- [test "x$JAVADOC" = x && AC_CHECK_PROGS([JAVADOC], [javadoc])],
- [test "x$JAVADOC" = x && AC_CHECK_PROGS([JAVADOC], [javadoc], [], [$JAVAPREFIX/bin])])
-test "x$JAVADOC" = x && AC_MSG_ERROR([no acceptable javadoc generator found in \$PATH])
-AC_PROVIDE([$0])dnl
-])
diff --git a/vpp-api/java/m4/ax_prog_javah.m4 b/vpp-api/java/m4/ax_prog_javah.m4
deleted file mode 100644
index cefc616d4ca..00000000000
--- a/vpp-api/java/m4/ax_prog_javah.m4
+++ /dev/null
@@ -1,64 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_javah.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_JAVAH
-#
-# DESCRIPTION
-#
-# AX_PROG_JAVAH tests the availability of the javah header generator and
-# looks for the jni.h header file. If available, JAVAH is set to the full
-# path of javah and CPPFLAGS is updated accordingly.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Luc Maisonobe <luc@spaceroots.org>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 8
-
-AU_ALIAS([AC_PROG_JAVAH], [AX_PROG_JAVAH])
-AC_DEFUN([AX_PROG_JAVAH],[
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CPP])dnl
-AC_PATH_PROG(JAVAH,javah)
-AS_IF([test -n "$ac_cv_path_JAVAH"],
- [
- AC_TRY_CPP([#include <jni.h>],,[
- ac_save_CPPFLAGS="$CPPFLAGS"
- _ACJAVAH_FOLLOW_SYMLINKS("$ac_cv_path_JAVAH")
- ax_prog_javah_bin_dir=`AS_DIRNAME([$_ACJAVAH_FOLLOWED])`
- ac_dir="`AS_DIRNAME([$ax_prog_javah_bin_dir])`/include"
- AS_CASE([$build_os],
- [cygwin*],
- [ac_machdep=win32],
- [ac_machdep=`AS_ECHO($build_os) | sed 's,[[-0-9]].*,,'`])
- CPPFLAGS="$ac_save_CPPFLAGS -I$ac_dir -I$ac_dir/$ac_machdep"
- AC_TRY_CPP([#include <jni.h>],
- ac_save_CPPFLAGS="$CPPFLAGS",
- AC_MSG_WARN([unable to include <jni.h>]))
- CPPFLAGS="$ac_save_CPPFLAGS"])
- ])
-])
-
-AC_DEFUN([_ACJAVAH_FOLLOW_SYMLINKS],[
-# find the include directory relative to the javac executable
-_cur="$1"
-while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
- AC_MSG_CHECKING([symlink for $_cur])
- _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
- case "$_slink" in
- /*) _cur="$_slink";;
- # 'X' avoids triggering unwanted echo options.
- *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
- esac
- AC_MSG_RESULT([$_cur])
-done
-_ACJAVAH_FOLLOWED="$_cur"
-])
diff --git a/vpp-api/java/m4/ax_try_compile_java.m4 b/vpp-api/java/m4/ax_try_compile_java.m4
deleted file mode 100644
index a8ed6b2a368..00000000000
--- a/vpp-api/java/m4/ax_try_compile_java.m4
+++ /dev/null
@@ -1,55 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_try_compile_java.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_TRY_COMPILE_JAVA
-#
-# DESCRIPTION
-#
-# AX_TRY_COMPILE_JAVA attempt to compile user given source.
-#
-# *Warning*: its success or failure can depend on a proper setting of the
-# CLASSPATH env. variable.
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission. The
-# general documentation, as well as the sample configure.in, is included
-# in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Devin Weaver <ktohg@tritarget.com>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 8
-
-AU_ALIAS([AC_TRY_COMPILE_JAVA], [AX_TRY_COMPILE_JAVA])
-AC_DEFUN([AX_TRY_COMPILE_JAVA],[
-AC_REQUIRE([AX_PROG_JAVAC])dnl
-cat << \EOF > Test.java
-/* [#]line __oline__ "configure" */
-ifelse([$1], , , [import $1;])
-public class Test {
-[$2]
-}
-EOF
-if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class
-then
-dnl Don't remove the temporary files here, so they can be examined.
- ifelse([$3], , :, [$3])
-else
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat Test.java >&AS_MESSAGE_LOG_FD
-ifelse([$4], , , [ rm -fr Test.java Test.class
- $4
-])dnl
-fi
-rm -fr Test.java Test.class])
diff --git a/vpp-api/java/m4/ax_try_run_java.m4 b/vpp-api/java/m4/ax_try_run_java.m4
deleted file mode 100644
index c680f03f2c4..00000000000
--- a/vpp-api/java/m4/ax_try_run_java.m4
+++ /dev/null
@@ -1,56 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_try_run_java.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_TRY_RUN_JAVA
-#
-# DESCRIPTION
-#
-# AX_TRY_RUN_JAVA attempt to compile and run user given source.
-#
-# *Warning*: its success or failure can depend on a proper setting of the
-# CLASSPATH env. variable.
-#
-# Note: This is part of the set of autoconf M4 macros for Java programs.
-# It is VERY IMPORTANT that you download the whole set, some macros depend
-# on other. Unfortunately, the autoconf archive does not support the
-# concept of set of macros, so I had to break it for submission. The
-# general documentation, as well as the sample configure.in, is included
-# in the AX_PROG_JAVA macro.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Devin Weaver <ktohg@tritarget.com>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 2
-
-AU_ALIAS([AC_TRY_RUN_JAVA], [AX_TRY_RUN_JAVA])
-AC_DEFUN([AX_TRY_RUN_JAVA],[
-AC_REQUIRE([AX_PROG_JAVAC])dnl
-AC_REQUIRE([AX_PROG_JAVA])dnl
-cat << \EOF > Test.java
-/* [#]line __oline__ "configure" */
-ifelse([$1], , , [include $1;])
-public class Test {
-[$2]
-}
-EOF
-if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class && ($JAVA $JAVAFLAGS Test; exit) 2>/dev/null
-then
-dnl Don't remove the temporary files here, so they can be examined.
- ifelse([$3], , :, [$3])
-else
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat Test.java >&AS_MESSAGE_LOG_FD
-ifelse([$4], , , [ rm -fr Test.java Test.class
- $4
-])dnl
-fi
-rm -fr Test.java Test.class])