FD.io VPP  v18.04-17-g3a0d853
Vector Packet Processing
jvpp_common.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef __included_jvpp_common_h__
16 #define __included_jvpp_common_h__
17 //
18 #include <vppinfra/types.h>
19 #include <vlibapi/api.h>
20 #include <vlibmemory/api.h>
21 #include <jni.h>
22 
23 typedef struct {
24  /* Unique identifier used for matching replays with requests */
25  volatile u32 context_id;
26 
27  /* Spinlock */
28  volatile u32 lock;
30 
31  /* JNI Native Method Interface pointer for message handlers */
32  JNIEnv *jenv;
33 
34  /* JNI Invoke Interface pointer for attachment of rx thread to java thread */
35  JavaVM *jvm;
36 
37  /* Convenience */
41 } jvpp_main_t;
42 
43 extern jvpp_main_t jvpp_main __attribute__((aligned (64)));
44 
46  return __sync_add_and_fetch(&jm->context_id, 1);
47 }
48 
50  while (__sync_lock_test_and_set(&jm->lock, 1))
51  ;
52  jm->tag = tag;
53 }
54 
56  jm->tag = 0;
58  jm->lock = 0;
59 }
60 
61 /**
62  * Calls onError callback on callbackObject reference. Passes instance of callbackExceptionClass as parameter.
63  */
64 void call_on_error(const char* callName, int contextId, int retval,
65  jclass callbackClass, jobject callbackObject,
66  jclass callbackExceptionClass);
67 
68 /**
69  * Retrieves message id based on message name and crc (key format: name_crc).
70  * Throws java/lang/IllegalStateException on failure.
71  */
72 u32 get_message_id(JNIEnv *env, const char* key);
73 
74 #endif /* __included_jvpp_common_h__ */
static_always_inline u32 vppjni_get_context_id(jvpp_main_t *jm)
Definition: jvpp_common.h:45
volatile u32 lock
Definition: jvpp_common.h:28
#define static_always_inline
Definition: clib.h:93
jvpp_main_t jvpp_main
Definition: jvpp_common.c:41
u32 get_message_id(JNIEnv *env, const char *key)
Retrieves message id based on message name and crc (key format: name_crc).
Definition: jvpp_common.c:82
void call_on_error(const char *callName, int contextId, int retval, jclass callbackClass, jobject callbackObject, jclass callbackExceptionClass)
Calls onError callback on callbackObject reference.
Definition: jvpp_common.c:43
JavaVM * jvm
Definition: jvpp_common.h:35
JNIEnv * jenv
Definition: jvpp_common.h:32
static_always_inline void vppjni_lock(jvpp_main_t *jm, u32 tag)
Definition: jvpp_common.h:49
unsigned int u32
Definition: types.h:88
static_always_inline void vppjni_unlock(jvpp_main_t *jm)
Definition: jvpp_common.h:55
u64 uword
Definition: types.h:112
struct _svm_queue svm_queue_t
u32 my_client_index
Definition: jvpp_common.h:39
#define CLIB_MEMORY_BARRIER()
Definition: clib.h:109
uword * messages_hash
Definition: jvpp_common.h:40
volatile u32 context_id
Definition: jvpp_common.h:25
svm_queue_t * vl_input_queue
Definition: jvpp_common.h:38