VPP-123: remove japi (the old Java API)

MANUAL_JAVA flag (used only by the japi)
was also removed.

Change-Id: Ied21521b2410af1c357afb04cbf9e849632ddc5f
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
This commit is contained in:
Marek Gradzki
2016-07-20 14:53:48 +02:00
committed by Damjan Marion
parent 84bde8dc13
commit 948b95a9a0
26 changed files with 60 additions and 4805 deletions

View File

@ -21,80 +21,11 @@ bin_PROGRAMS =
CLEANFILES =
lib_LTLIBRARIES =
nobase_include_HEADERS = \
japi/org_openvpp_vppjapi_vppApi.h \
japi/org_openvpp_vppjapi_vppConn.h
lib_LTLIBRARIES += libvppjni.la
libvppjni_la_SOURCES = japi/vppjni.c japi/vppapi.c japi/vppjni_env.h japi/vppjni_env.c
libvppjni_la_LIBADD = -lvlibmemoryclient -lvlibapi -lsvm -lvppinfra \
-lpthread -lm -lrt
libvppjni_la_LDFLAGS = -module
libvppjni_la_CPPFLAGS = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
jarfile = vppjapi-$(PACKAGE_VERSION).jar
packagedir = org/openvpp/vppjapi
JAVAROOT = .
$(jarfile): libvppjni.la
cd .libs ; $(JAR) cf $(JARFLAGS) ../$@ libvppjni.so.0.0.0 ../$(packagedir)/*.class ; cd ..
BUILT_SOURCES += japi/org_openvpp_vppjapi_vppConn.h japi/vppapi.c
japi/org_openvpp_vppjapi_vppConn.h: \
japi/org/openvpp/vppjapi/vppVersion.java \
japi/org/openvpp/vppjapi/vppInterfaceDetails.java \
japi/org/openvpp/vppjapi/vppInterfaceCounters.java \
japi/org/openvpp/vppjapi/vppBridgeDomainDetails.java \
japi/org/openvpp/vppjapi/vppBridgeDomainInterfaceDetails.java \
japi/org/openvpp/vppjapi/vppL2Fib.java \
japi/org/openvpp/vppjapi/vppIPv4Address.java \
japi/org/openvpp/vppjapi/vppIPv6Address.java \
japi/org/openvpp/vppjapi/vppVxlanTunnelDetails.java \
japi/org/openvpp/vppjapi/vppConn.java \
japi/org/openvpp/vppjapi/vppApiCallbacks.java \
../../vpp/vpp-api/vpe.api.h
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppVersion.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppVersion ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppInterfaceDetails.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppInterfaceDetails ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppInterfaceCounters.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppInterfaceCounters ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppBridgeDomainInterfaceDetails.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppBridgeDomainInterfaceDetails ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppBridgeDomainDetails.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppBridgeDomainDetails ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppL2Fib.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppL2Fib ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppIPv4Address.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppIPv4Address ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppIPv6Address.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppIPv6Address ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppVxlanTunnelDetails.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppVxlanTunnelDetails ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppConn.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppConn ;
japi/vppapi.c: japi/org_openvpp_vppjapi_vppConn.h
pushd .. ; dir=`pwd` ; popd ; \
instdir=`echo $${dir} | sed -e 's:build-root/build:build-root/install:'` ; \
vppapigen --input $${instdir}/../vpp/vpp-api/vpe.api --jni japi/vppapi.c --app vpe ; \
vppapigen --input $${instdir}/../vpp/vpp-api/vpe.api --java japi/vppApi.java --app vpe ; \
$(JAVAC) -classpath . -d . japi/vppApi.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppApi ; \
$(JAVAC) -classpath . -d . @srcdir@/japi/org/openvpp/vppjapi/vppApiCallbacks.java ; \
$(JAVAH) -classpath . -d japi org.openvpp.vppjapi.vppApiCallbacks ;
demo = japi/test/demo.class
$(demo): $(jarfile)
$(JAVAC) -cp $(jarfile) -d $(JAVAROOT) @srcdir@/japi/test/demo.java
#
# jVpp binding
#
nobase_include_HEADERS += \
nobase_include_HEADERS = \
jvpp/org_openvpp_jvpp_VppJNIConnection.h
lib_LTLIBRARIES += libjvpp.la
@ -138,4 +69,4 @@ jvpp/org_openvpp_jvpp_VppJNIConnection.h: $(prefix)/../vpp/vpp-api/vpe.api
$(jarfile_jvpp): libjvpp.la
cd .libs ; $(JAR) cf $(JARFLAGS) ../$@ libjvpp.so.0.0.0 ../$(packagedir_jvpp)/* ; cd ..;
all-local: $(jarfile) $(jarfile_jvpp) $(demo)
all-local: $(jarfile_jvpp)

View File

@ -1,4 +1,4 @@
AC_INIT(vpp-japi, 16.09)
AC_INIT(jvpp, 16.09)
LT_INIT
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE

View File

@ -1,35 +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.
*/
package org.openvpp.vppjapi;
import java.io.IOException;
import org.openvpp.vppjapi.vppApi;
public abstract class vppApiCallbacks extends vppApi {
public vppApiCallbacks(String clientName) throws IOException {
super(clientName);
}
/* Disabled!
*
* public abstract void interfaceDetails(
int ifIndex, String interfaceName, int supIfIndex, byte[] physAddr,
byte adminUp, byte linkUp, byte linkDuplex, byte linkSpeed,
int subId, byte subDot1ad, byte subNumberOfTags, int subOuterVlanId, int subInnerVlanId,
byte subExactMatch, byte subDefault, byte subOuterVlanIdAny, byte subInnerVlanIdAny,
int vtrOp, int vtrPushDot1q, int vtrTag1, int vtrTag2);
*/
}

View File

@ -1,30 +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.
*/
package org.openvpp.vppjapi;
import org.openvpp.vppjapi.vppBridgeDomainInterfaceDetails;
public final class vppBridgeDomainDetails {
public String name;
public int bdId;
public boolean flood;
public boolean uuFlood;
public boolean forward;
public boolean learn;
public boolean arpTerm;
public String bviInterfaceName;
public vppBridgeDomainInterfaceDetails[] interfaces;
}

View File

@ -1,21 +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.
*/
package org.openvpp.vppjapi;
public final class vppBridgeDomainInterfaceDetails {
public String interfaceName;
public byte splitHorizonGroup;
}

View File

@ -1,237 +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.
*/
package org.openvpp.vppjapi;
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 org.openvpp.vppjapi.vppVersion;
import org.openvpp.vppjapi.vppInterfaceDetails;
import org.openvpp.vppjapi.vppInterfaceCounters;
import org.openvpp.vppjapi.vppBridgeDomainDetails;
import org.openvpp.vppjapi.vppIPv4Address;
import org.openvpp.vppjapi.vppIPv6Address;
import org.openvpp.vppjapi.vppVxlanTunnelDetails;
public class vppConn implements AutoCloseable {
private static final String LIBNAME = "libvppjni.so.0.0.0";
static {
try {
loadLibrary();
} catch (Exception e) {
System.out.printf("Can't find vpp jni library: %s\n", 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(String.format("Failed to load library %s", p), e);
}
} finally {
try {
Files.deleteIfExists(p);
} catch (IOException e) {
}
}
}
private static void loadLibrary() throws IOException {
try (final InputStream is = vppConn.class.getResourceAsStream('/' + LIBNAME)) {
if (is == null) {
throw new IOException(String.format("Failed to open library resource %s",
LIBNAME));
}
loadStream(is);
}
}
private static vppConn currentConnection = null;
private final String clientName;
private volatile boolean disconnected = false;
// Hidden on purpose to prevent external instantiation
vppConn(final String clientName) throws IOException {
this.clientName = clientName;
synchronized (vppConn.class) {
if (currentConnection != null) {
throw new IOException("Already connected as " + currentConnection.clientName);
}
final int ret = clientConnect(clientName);
if (ret != 0) {
throw new IOException("Connection returned error " + ret);
}
currentConnection = this;
}
}
@Override
public synchronized final void close() {
if (!disconnected) {
disconnected = true;
synchronized (vppConn.class) {
clientDisconnect();
currentConnection = null;
}
}
}
/**
* Check if this instance is connected.
*
* @throws IllegalStateException if this instance was disconnected.
*/
protected final void checkConnected() {
if (disconnected) {
throw new IllegalStateException("Disconnected client " + clientName);
}
}
public final int getRetval(int context, int release) {
checkConnected();
return getRetval0(context, release);
}
public final String getInterfaceList (String nameFilter) {
checkConnected();
return getInterfaceList0(nameFilter);
}
public final int swIfIndexFromName (String interfaceName) {
checkConnected();
return swIfIndexFromName0(interfaceName);
}
public final String interfaceNameFromSwIfIndex (int swIfIndex) {
checkConnected();
return interfaceNameFromSwIfIndex0(swIfIndex);
}
public final void clearInterfaceTable () {
checkConnected();
clearInterfaceTable0();
}
public final vppInterfaceDetails[] swInterfaceDump (byte nameFilterValid, byte [] nameFilter) {
checkConnected();
return swInterfaceDump0(nameFilterValid, nameFilter);
}
public final int bridgeDomainIdFromName(String bridgeDomain) {
checkConnected();
return bridgeDomainIdFromName0(bridgeDomain);
}
public final int findOrAddBridgeDomainId(String bridgeDomain) {
checkConnected();
return findOrAddBridgeDomainId0(bridgeDomain);
}
public final vppVersion getVppVersion() {
checkConnected();
return getVppVersion0();
}
public final vppInterfaceCounters getInterfaceCounters(int swIfIndex) {
checkConnected();
return getInterfaceCounters0(swIfIndex);
}
public final int[] bridgeDomainDump(int bdId) {
checkConnected();
return bridgeDomainDump0(bdId);
}
public final vppBridgeDomainDetails getBridgeDomainDetails(int bdId) {
checkConnected();
return getBridgeDomainDetails0(bdId);
}
public final vppL2Fib[] l2FibTableDump(int bdId) {
checkConnected();
return l2FibTableDump0(bdId);
}
public final int bridgeDomainIdFromInterfaceName(String interfaceName) {
checkConnected();
return bridgeDomainIdFromInterfaceName0(interfaceName);
}
public final vppIPv4Address[] ipv4AddressDump(String interfaceName) {
checkConnected();
return ipv4AddressDump0(interfaceName);
}
public final vppIPv6Address[] ipv6AddressDump(String interfaceName) {
checkConnected();
return ipv6AddressDump0(interfaceName);
}
public final vppVxlanTunnelDetails[] vxlanTunnelDump(int swIfIndex) {
checkConnected();
return vxlanTunnelDump0(swIfIndex);
}
public final int setInterfaceDescription(String ifName, String ifDesc) {
checkConnected();
return setInterfaceDescription0(ifName, ifDesc);
}
public final String getInterfaceDescription(String ifName) {
checkConnected();
return getInterfaceDescription0(ifName);
}
private static native int clientConnect(String clientName);
private static native void clientDisconnect();
private static native int getRetval0(int context, int release);
private static native String getInterfaceList0(String nameFilter);
private static native int swIfIndexFromName0(String interfaceName);
private static native String interfaceNameFromSwIfIndex0(int swIfIndex);
private static native void clearInterfaceTable0();
private static native vppInterfaceDetails[] swInterfaceDump0(byte nameFilterValid, byte [] nameFilter);
private static native int bridgeDomainIdFromName0(String bridgeDomain);
private static native int findOrAddBridgeDomainId0(String bridgeDomain);
private static native vppVersion getVppVersion0();
private static native vppInterfaceCounters getInterfaceCounters0(int swIfIndex);
private static native int[] bridgeDomainDump0(int bdId);
private static native vppBridgeDomainDetails getBridgeDomainDetails0(int bdId);
private static native vppL2Fib[] l2FibTableDump0(int bdId);
private static native int bridgeDomainIdFromInterfaceName0(String interfaceName);
private static native vppIPv4Address[] ipv4AddressDump0(String interfaceName);
private static native vppIPv6Address[] ipv6AddressDump0(String interfaceName);
private static native vppVxlanTunnelDetails[] vxlanTunnelDump0(int swIfIndex);
private static native int setInterfaceDescription0(String ifName, String ifDesc);
private static native String getInterfaceDescription0(String ifName);
}

View File

@ -1,26 +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.
*/
package org.openvpp.vppjapi;
public final class vppIPv4Address {
public final int ip;
public final byte prefixLength;
public vppIPv4Address(int ip, byte prefixLength) {
this.ip = ip;
this.prefixLength = prefixLength;
}
}

View File

@ -1,27 +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.
*/
package org.openvpp.vppjapi;
public class vppIPv6Address {
// FIXME: this is dangerous
public final byte[] ip;
public final byte prefixLength;
public vppIPv6Address(byte[] ip, byte prefixLength) {
this.ip = ip;
this.prefixLength = prefixLength;
}
}

View File

@ -1,77 +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.
*/
package org.openvpp.vppjapi;
public final class vppInterfaceCounters {
public final long rxOctets;
public final long rxIp4;
public final long rxIp6;
public final long rxUnicast;
public final long rxMulticast;
public final long rxBroadcast;
public final long rxDiscard;
public final long rxFifoFull;
public final long rxError;
public final long rxUnknownProto;
public final long rxMiss;
public final long txOctets;
public final long txIp4;
public final long txIp6;
public final long txUnicast;
public final long txMulticast;
public final long txBroadcast;
public final long txDiscard;
public final long txFifoFull;
public final long txError;
public final long txUnknownProto;
public final long txMiss;
public vppInterfaceCounters(
long rxOctets, long rxIp4, long rxIp6, long rxUni, long rxMulti,
long rxBcast, long rxDiscard, long rxFifoFull, long rxError,
long rxUnknownProto, long rxMiss,
long txOctets, long txIp4, long txIp6, long txUni, long txMulti,
long txBcast, long txDiscard, long txFifoFull, long txError,
long txUnknownProto, long txMiss)
{
this.rxOctets = rxOctets;
this.rxIp4 = rxIp4;
this.rxIp6 = rxIp6;
this.rxUnicast = rxUni;
this.rxMulticast = rxMulti;
this.rxBroadcast = rxBcast;
this.rxDiscard = rxDiscard;
this.rxFifoFull = rxFifoFull;
this.rxError = rxError;
this.rxUnknownProto = rxUnknownProto;
this.rxMiss = rxMiss;
this.txOctets = txOctets;
this.txIp4 = txIp4;
this.txIp6 = txIp6;
this.txUnicast = txUni;
this.txMulticast = txMulti;
this.txBroadcast = txBcast;
this.txDiscard = txDiscard;
this.txFifoFull = txFifoFull;
this.txError = txError;
this.txUnknownProto = txUnknownProto;
this.txMiss = txMiss;
}
}

View File

@ -1,71 +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.
*/
package org.openvpp.vppjapi;
public final class vppInterfaceDetails {
public final int ifIndex;
public final String interfaceName;
public final int supIfIndex;
// FIXME: this is dangerous
public final byte[] physAddr;
public final byte adminUp;
public final byte linkUp;
public final byte linkDuplex;
public final byte linkSpeed;
public final int subId;
public final byte subDot1ad;
public final byte subNumberOfTags;
public final int subOuterVlanId;
public final int subInnerVlanId;
public final byte subExactMatch;
public final byte subDefault;
public final byte subOuterVlanIdAny;
public final byte subInnerVlanIdAny;
public final int vtrOp;
public final int vtrPushDot1q;
public final int vtrTag1;
public final int vtrTag2;
public final int linkMtu;
public vppInterfaceDetails(int ifIndex, String interfaceName, int supIfIndex, byte[] physAddr, byte adminUp,
byte linkUp, byte linkDuplex, byte linkSpeed, int subId, byte subDot1ad, byte subNumberOfTags,
int subOuterVlanId, int subInnerVlanId, byte subExactMatch, byte subDefault, byte subOuterVlanIdAny,
byte subInnerVlanIdAny, int vtrOp, int vtrPushDot1q, int vtrTag1, int vtrTag2, int linkMtu)
{
this.ifIndex = ifIndex;
this.interfaceName = interfaceName;
this.supIfIndex = supIfIndex;
this.physAddr = physAddr;
this.adminUp = adminUp;
this.linkUp = linkUp;
this.linkDuplex = linkDuplex;
this.linkSpeed = linkSpeed;
this.subId = subId;
this.subDot1ad = subDot1ad;
this.subNumberOfTags = subNumberOfTags;
this.subOuterVlanId = subOuterVlanId;
this.subInnerVlanId = subInnerVlanId;
this.subExactMatch = subExactMatch;
this.subDefault = subDefault;
this.subOuterVlanIdAny = subOuterVlanIdAny;
this.subInnerVlanIdAny = subInnerVlanIdAny;
this.vtrOp = vtrOp;
this.vtrPushDot1q = vtrPushDot1q;
this.vtrTag1 = vtrTag1;
this.vtrTag2 = vtrTag2;
this.linkMtu = linkMtu;
}
}

View File

@ -1,35 +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.
*/
package org.openvpp.vppjapi;
public final class vppL2Fib {
// FIXME: this is dangerous
public final byte[] physAddress;
public final boolean staticConfig;
public final String outgoingInterface;
public final boolean filter;
public final boolean bridgedVirtualInterface;
public vppL2Fib(byte[] physAddress, boolean staticConfig,
String outgoingInterface, boolean filter,
boolean bridgedVirtualInterface) {
this.physAddress = physAddress;
this.staticConfig = staticConfig;
this.outgoingInterface = outgoingInterface;
this.filter = filter;
this.bridgedVirtualInterface = bridgedVirtualInterface;
}
}

View File

@ -1,31 +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.
*/
package org.openvpp.vppjapi;
public final class vppVersion {
public final String programName;
public final String buildDirectory;
public final String gitBranch;
public final String buildDate;
public vppVersion(String progName, String buildDir, String gitBranch, String buildDate) {
this.programName = progName;
this.buildDirectory = buildDir;
this.gitBranch = gitBranch;
this.buildDate = buildDate;
}
}

View File

@ -1,35 +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.
*/
package org.openvpp.vppjapi;
public final class vppVxlanTunnelDetails {
public final byte[] srcAddress;
public final byte[] dstAddress;
public final int encapVrfId;
public final int vni;
public final int decapNextIndex;
public final boolean isIpv6;
public vppVxlanTunnelDetails(byte[] srcAddress, byte[] dstAddress,
int encapVrfId, int vni, int decapNextIndex, boolean isIpv6) {
this.srcAddress = srcAddress;
this.dstAddress = dstAddress;
this.encapVrfId = encapVrfId;
this.vni = vni;
this.decapNextIndex = decapNextIndex;
this.isIpv6 = isIpv6;
}
}

View File

@ -1,170 +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.
*/
import org.openvpp.vppjapi.*;
public class demo {
public static void main (String[] args) throws Exception {
vppApi api = new vppApi ("JavaTest");
System.out.printf ("Connected OK...");
String intlist;
int [] contexts;
int i, limit;
int trips;
int rv, errors, saved_error;
long before, after;
if (false)
{
intlist = api.getInterfaceList ("");
System.out.printf ("Unfiltered interface list:\n%s", intlist);
trips = 0;
contexts = new int[6];
for (i = 0; i < 6; i++)
{
contexts[i] = api.swInterfaceSetFlags
(5 + i /* sw_if_index */,
(byte)1 /* admin_up */,
(byte)1 /* link_up (ignored) */,
(byte)0 /* deleted */);
}
/* Thread.sleep (1); */
errors = 0;
saved_error = 0;
for (i = 0; i < 6; i ++)
{
while (true)
{
rv = api.getRetval (contexts[i], 1 /* release */);
if (rv != -77)
break;
Thread.sleep (1);
trips++;
}
if (rv < 0)
{
saved_error = rv;
errors++;
}
}
if (errors == 0)
System.out.printf ("intfcs up...\n");
else
System.out.printf
("%d errors, last error %d...\n", errors, saved_error);
}
limit = 250000;
saved_error = 0;
errors = 0;
contexts = new int [limit];
byte [] address = new byte [4];
byte [] zeros = new byte [4];
address[0] = (byte)192;
address[1] = (byte)168;
address[2] = (byte)2;
address[3] = (byte)1;
for (i = 0; i < 4; i++)
zeros[i] = 0;
System.out.printf ("start %d route ops ...", limit);
before = System.currentTimeMillis();
for (i = 0; i < limit; i++) {
contexts[i] = api.ipAddDelRoute
(0 /* int nextHopSwIfIndex */,
0 /* int vrfId */,
0 /* int lookupInVrf */,
0 /* int resolveAttempts */,
0 /* int classifyTableIndex */,
(byte)0 /* byte createVrfIfNeeded */,
(byte)0 /* byte resolveIfNeeded */,
(byte)1 /* byte isAdd */,
(byte)1 /* byte isDrop */,
(byte)0 /* byte isIpv6 */,
(byte)0 /* byte isLocal */,
(byte)0 /* byte isClassify */,
(byte)0 /* byte isMultipath */,
(byte)0 /* byte notLast */,
(byte)0 /* byte nextHopWeight */,
(byte)32 /* byte dstAddressLength */,
address,
zeros);
address[3] += 1;
if (address[3] == 0)
{
address[2] += 1;
if (address[2] == 0)
{
address[1] += 1;
{
if (address[1] == 0)
{
address[0] += 1;
}
}
}
}
}
trips = 0;
for (i = 0; i < limit; i++)
{
while (true)
{
rv = api.getRetval (contexts[i], 1 /* release */);
if (rv != -77)
break;
Thread.sleep (1);
trips++;
}
if (rv < 0)
{
saved_error = rv;
errors++;
}
}
after = System.currentTimeMillis();
if (errors == 0)
System.out.printf ("done %d route ops (all OK)...\n", limit);
else
System.out.printf
("%d errors, last error %d...\n", errors, saved_error);
System.out.printf ("result in %d trips\n", trips);
System.out.printf ("%d routes in %d milliseconds, %d routes/msec\n",
limit, after - before,
limit / (after - before));
api.close();
System.out.printf ("Done...\n");
}
}

View File

@ -1,52 +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.
*/
import java.net.InetAddress;
import org.openvpp.vppjapi.*;
public class vppApi {
native int controlPing();
native void test (byte[] array, byte[] array2);
public static void main (String[] args) throws Exception {
vppConn api = new vppConn ();
String ipv6 = "db01::feed";
String ipv4 = "192.168.1.1";
InetAddress addr6 = InetAddress.getByName(ipv6);
InetAddress addr4 = InetAddress.getByName(ipv4);
byte[] ip4bytes = addr4.getAddress();
byte[] ip6bytes = addr6.getAddress();
int rv;
api.test(ip4bytes,ip6bytes);
rv = api.clientConnect ("JavaTest");
if (rv == 0)
System.out.printf ("Connected OK...");
else
{
System.out.printf ("clientConnect returned %d\n", rv);
System.exit (1);
}
rv = api.controlPing();
System.out.printf ("data plane pid is %d\n", rv);
Thread.sleep (5000);
api.clientDisconnect();
System.out.printf ("Done...\n");
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,111 +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 <jni.h>
#include "vppjni_env.h"
// Head of the class registration list.
static vppjni_class_t *class_head;
// Head of the class registration list.
static vppjni_field_t *field_head;
void vppjni_register_class(vppjni_class_t *ptr)
{
vppjni_class_t **where = &class_head;
while (*where != NULL) {
where = &((*where)->next);
}
*where = ptr;
}
void vppjni_register_field(vppjni_field_t *ptr) {
vppjni_field_t **where = &field_head;
while (*where != NULL) {
where = &((*where)->next);
}
*where = ptr;
}
jobject vppjni_new_object(JNIEnv *env, const vppjni_class_t *ptr, va_list ap) {
jobject obj = (*env)->NewObjectV(env, ptr->jclass, ptr->jinit, ap);
if ((*env)->ExceptionCheck(env)) {
(*env)->ExceptionDescribe(env);
return NULL;
}
return obj;
}
int vppjni_init(JNIEnv *env)
{
vppjni_class_t *cwlk;
vppjni_field_t *fwlk;
for (cwlk = class_head; cwlk != NULL; cwlk = cwlk->next) {
jclass cls;
jmethodID method;
cls = (*env)->FindClass(env, cwlk->fqcn);
if ((*env)->ExceptionCheck(env)) {
(*env)->ExceptionDescribe(env);
vppjni_uninit(env);
return JNI_ERR;
}
method = (*env)->GetMethodID(env, cls, "<init>", cwlk->init_sig);
if ((*env)->ExceptionCheck(env)) {
(*env)->ExceptionDescribe(env);
vppjni_uninit(env);
return JNI_ERR;
}
cwlk->jclass = (*env)->NewGlobalRef(env, cls);
if (cwlk->jclass == NULL) {
vppjni_uninit(env);
return JNI_ERR;
}
cwlk->jinit = method;
}
for (fwlk = field_head; fwlk != NULL; fwlk = fwlk->next) {
fwlk->jfield = (*env)->GetFieldID(env, fwlk->clsref->jclass, fwlk->name, fwlk->type);
if ((*env)->ExceptionCheck(env)) {
(*env)->ExceptionDescribe(env);
vppjni_uninit(env);
return JNI_ERR;
}
}
return 0;
}
void vppjni_uninit(JNIEnv *env) {
vppjni_class_t *cwlk;
vppjni_field_t *fwlk;
for (fwlk = field_head; fwlk != NULL; fwlk = fwlk->next) {
fwlk->jfield = NULL;
}
for (cwlk = class_head; cwlk != NULL; cwlk = cwlk->next) {
if (cwlk->jclass != NULL ) {
(*env)->DeleteGlobalRef(env, cwlk->jclass);
}
cwlk->jclass = NULL;
cwlk->jinit = NULL;
}
}

View File

@ -1,118 +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.
*/
/*
* Utilities for accessing Java classes/method/fields in an efficient
* manner.
*/
/*
* A potentially-uninitialized reference to a Java class
*/
typedef struct vppjni_class {
// Fully-Qualified Class Name
const char *fqcn;
// Constructor signature
const char *init_sig;
// Global reference to class handle
jclass jclass;
// Constructor method handle
jmethodID jinit;
// Next item in linked list
struct vppjni_class *next;
} vppjni_class_t;
typedef struct jenv_field {
// Field name
const char *name;
// Field type
const char *type;
// Defining class reference
const vppjni_class_t *clsref;
// Field handle
jfieldID jfield;
// Next item in linked list
struct jenv_field *next;
} vppjni_field_t;
#define VPPJNI_CLASS_SYMBOL(name) vppjni_class_##name
#define VPPJNI_CLASS_INIT(name) vppjni_class_##name##_init
#define BIND_JAPI_CLASS(name, sig) \
static vppjni_class_t VPPJNI_CLASS_SYMBOL(name); \
static void VPPJNI_CLASS_INIT(name)(void) __attribute__((__constructor__)); \
static void VPPJNI_CLASS_INIT(name)() \
{ \
VPPJNI_CLASS_SYMBOL(name).fqcn = "org/openvpp/vppjapi/" #name; \
VPPJNI_CLASS_SYMBOL(name).init_sig = sig; \
vppjni_register_class(&VPPJNI_CLASS_SYMBOL(name)); \
} \
static __attribute__((unused)) jobject name##Array(JNIEnv *env, jsize length) \
{ \
return (*env)->NewObjectArray(env, length, VPPJNI_CLASS_SYMBOL(name).jclass, NULL); \
} \
static jobject name##Object(JNIEnv *env, ...) \
{ \
va_list ap; \
va_start(ap, env); \
jobject obj = vppjni_new_object(env, &VPPJNI_CLASS_SYMBOL(name), ap); \
va_end(ap); \
return obj; \
}
#define VPPJNI_FIELD_SYMBOL(cls, name) vppjni_field_##cls##_##name
#define VPPJNI_FIELD_INIT(cls, name) vppjni_field_##cls##_##name##_init
#define BIND_JAPI_FIELD(cls, field, sig) \
static vppjni_field_t VPPJNI_FIELD_SYMBOL(cls, field); \
static void VPPJNI_FIELD_INIT(cls, field)(void) __attribute__((__constructor__)); \
static void VPPJNI_FIELD_INIT(cls, field)() \
{ \
VPPJNI_FIELD_SYMBOL(cls, field).name = #field; \
VPPJNI_FIELD_SYMBOL(cls, field).type = sig; \
VPPJNI_FIELD_SYMBOL(cls, field).clsref = &VPPJNI_CLASS_SYMBOL(cls); \
vppjni_register_field(&VPPJNI_FIELD_SYMBOL(cls, field)); \
}
#define BIND_JAPI_BOOL_FIELD(cls, field) \
BIND_JAPI_FIELD(cls, field, "Z"); \
static void set_##cls##_##field(JNIEnv *env, jobject obj, jboolean value) \
{ \
(*env)->SetBooleanField(env, obj, VPPJNI_FIELD_SYMBOL(cls, field).jfield, value); \
}
#define BIND_JAPI_BYTE_FIELD(cls, field) \
BIND_JAPI_FIELD(cls, field, "B"); \
static void set_##cls##_##field(JNIEnv *env, jobject obj, jbyte value) \
{ \
(*env)->SetByteField(env, obj, VPPJNI_FIELD_SYMBOL(cls, field).jfield, value); \
}
#define BIND_JAPI_INT_FIELD(cls, field) \
BIND_JAPI_FIELD(cls, field, "I"); \
static void set_##cls##_##field(JNIEnv *env, jobject obj, jint value) \
{ \
(*env)->SetIntField(env, obj, VPPJNI_FIELD_SYMBOL(cls, field).jfield, value); \
}
#define BIND_JAPI_OBJ_FIELD(cls, field, sig) \
BIND_JAPI_FIELD(cls, field, sig); \
static void set_##cls##_##field(JNIEnv *env, jobject obj, jobject value) \
{ \
(*env)->SetObjectField(env, obj, VPPJNI_FIELD_SYMBOL(cls, field).jfield, value); \
}
#define BIND_JAPI_STRING_FIELD(cls, field) \
BIND_JAPI_OBJ_FIELD(cls, field, "Ljava/lang/String;")
jobject vppjni_new_object(JNIEnv *env, const vppjni_class_t *ptr, va_list ap) __attribute__ ((visibility ("hidden")));
void vppjni_register_class(vppjni_class_t *ptr) __attribute__ ((visibility ("hidden")));
void vppjni_register_field(vppjni_field_t *ptr) __attribute__ ((visibility ("hidden")));
int vppjni_init(JNIEnv *env) __attribute__ ((visibility ("hidden")));
void vppjni_uninit(JNIEnv *env) __attribute__ ((visibility ("hidden")));