summaryrefslogtreecommitdiffstats
path: root/vpp-api/java/jvpp-registry
diff options
context:
space:
mode:
Diffstat (limited to 'vpp-api/java/jvpp-registry')
-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
25 files changed, 0 insertions, 1617 deletions
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;
-}