FD.io VPP  v19.08.2-294-g37e99c22d
Vector Packet Processing
api.h
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * Copyright (c) 2009 Cisco and/or its affiliates.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *------------------------------------------------------------------
16  */
17 
18 #ifndef included_vlibmemory_api_common_h
19 #define included_vlibmemory_api_common_h
20 
21 #include <svm/svm_common.h>
22 #include <vlibapi/api.h>
23 #include <vlibmemory/memory_api.h>
25 #include <vlibmemory/socket_api.h>
27 
28 void vl_api_rpc_call_main_thread (void *fp, u8 * data, u32 data_length);
29 void vl_api_force_rpc_call_main_thread (void *fp, u8 * data, u32 data_length);
30 u16 vl_client_get_first_plugin_msg_id (const char *plugin_name);
33 
34 always_inline void
36 {
38  {
39  vl_socket_api_send (rp, elem);
40  }
41  else
42  {
43  vl_msg_api_send_shmem (rp->vl_input_queue, (u8 *) & elem);
44  }
45 }
46 
47 always_inline int
49 {
51  return 1;
52  else
54 }
55 
58 {
60  return vl_socket_api_client_handle_to_registration (ntohl (index));
62 }
63 
66 {
67  return reg->clib_file_index;
68 }
69 
72 {
74 }
75 
76 always_inline void
78 {
80  if (cf)
81  clib_file_del (&file_main, cf);
82 }
83 
85 vl_api_send_fd_msg (vl_api_registration_t * reg, int fds[], int n_fds)
86 {
88  if (cf)
89  return vl_sock_api_send_fd_msg (cf->file_descriptor, fds, n_fds);
90  return 0;
91 }
92 
94 vl_api_recv_fd_msg (vl_api_registration_t * reg, int fds[], int n_fds,
95  u32 wait)
96 {
98  if (cf)
99  return vl_sock_api_recv_fd_msg (cf->file_descriptor, fds, n_fds, wait);
100  return 0;
101 }
102 
103 /*
104  * vl_api_clnt process data used by transports (socket api in particular)
105  */
107 extern volatile int **vl_api_queue_cursizes;
108 
110 {
114 
115 #define foreach_histogram_bucket \
116 _(400) \
117 _(200) \
118 _(100) \
119 _(10)
120 
121 typedef enum
122 {
123 #define _(n) SLEEP_##n##_US,
125 #undef _
128 
129 extern u64 vector_rate_histogram[];
130 
131 /*
132  * sockclnt APIs XXX are these actually used anywhere?
133  */
135 void socksvr_add_pending_output (struct clib_file *uf,
136  struct vl_api_registration_ *cf,
137  u8 * buffer, uword buffer_bytes);
138 void vl_socket_process_msg (struct clib_file *uf,
139  struct vl_api_registration_ *rp, i8 * input_v);
140 u32 sockclnt_open_index (char *client_name, char *hostname, int port);
141 void sockclnt_close_index (u32 index);
143 
144 #endif /* included_vlibmemory_api_common_h */
145 
146 /*
147  * fd.io coding-style-patch-verification: ON
148  *
149  * Local Variables:
150  * eval: (c-set-style "gnu")
151  * End:
152  */
static void clib_file_del(clib_file_main_t *um, clib_file_t *f)
Definition: file.h:109
u64 vector_rate_histogram[]
Definition: vlib_api.c:179
static void vl_api_registration_del_file(vl_api_registration_t *reg)
Definition: api.h:77
void vl_socket_api_send(vl_api_registration_t *rp, u8 *elem)
Definition: socket_api.c:114
volatile int ** vl_api_queue_cursizes
Definition: memory_api.c:61
static clib_file_t * vl_api_registration_file(vl_api_registration_t *reg)
Definition: api.h:71
unsigned long u64
Definition: types.h:89
enum vl_api_clnt_process_events vl_api_clnt_process_events_t
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
Definition: api.h:35
u32 file_descriptor
Definition: file.h:54
int vl_mem_api_can_send(svm_queue_t *q)
u8 data[128]
Definition: ipsec.api:251
unsigned char u8
Definition: types.h:56
void sockclnt_close_index(u32 index)
void vl_client_msg_api_send(vl_api_registration_t *cm, u8 *elem)
clib_error_t * vl_sock_api_recv_fd_msg(int socket_fd, int fds[], int n_fds, u32 wait)
static int vl_api_can_send_msg(vl_api_registration_t *rp)
Definition: api.h:48
u32 clib_file_index
Socket only: file index.
Definition: api_common.h:66
static clib_file_t * clib_file_get(clib_file_main_t *fm, u32 file_index)
Definition: file.h:152
#define always_inline
Definition: clib.h:99
static clib_error_t * vl_api_recv_fd_msg(vl_api_registration_t *reg, int fds[], int n_fds, u32 wait)
Definition: api.h:94
vl_api_registration_t * vl_mem_api_client_index_to_registration(u32 handle)
Definition: memory_api.c:797
#define foreach_histogram_bucket
Definition: api.h:115
vlib_node_registration_t vl_api_clnt_node
(constructor) VLIB_REGISTER_NODE (vl_api_clnt_node)
Definition: vlib_api.c:422
void vl_api_rpc_call_main_thread(void *fp, u8 *data, u32 data_length)
Definition: vlib_api.c:608
clib_file_main_t file_main
Definition: main.c:63
vl_api_registration_t * sockclnt_get_registration(u32 index)
unsigned int u32
Definition: types.h:88
void vl_msg_api_send_shmem(svm_queue_t *q, u8 *elem)
vl_registration_type_t registration_type
type
Definition: api_common.h:48
vnet_crypto_main_t * cm
Definition: quic_crypto.c:41
svm_queue_t * vl_input_queue
shared memory only: pointer to client input queue
Definition: api_common.h:61
unsigned short u16
Definition: types.h:57
vl_api_clnt_process_events
Definition: api.h:109
u16 vl_client_get_first_plugin_msg_id(const char *plugin_name)
#define PREDICT_FALSE(x)
Definition: clib.h:112
u16 port
Definition: punt.api:40
signed char i8
Definition: types.h:45
API main structure, used by both vpp and binary API clients.
Definition: api_common.h:203
u32 sockclnt_open_index(char *client_name, char *hostname, int port)
An API client registration, only in vpp/vlib.
Definition: api_common.h:46
Shared memory connection.
Definition: api_common.h:38
vlib_main_t * vm
Definition: buffer.c:323
vl_api_registration_t * vl_socket_api_client_handle_to_registration(u32 handle)
Definition: socket_api.c:99
u8 * vl_api_serialize_message_table(api_main_t *am, u8 *vector)
Definition: api_shared.c:193
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
Definition: api.h:57
static clib_error_t * vl_api_send_fd_msg(vl_api_registration_t *reg, int fds[], int n_fds)
Definition: api.h:85
static u32 vl_api_registration_file_index(vl_api_registration_t *reg)
Definition: api.h:65
void vl_api_send_pending_rpc_requests(vlib_main_t *vm)
Definition: main.c:1671
u8 vl_socket_api_registration_handle_is_valid(u32 reg_handle)
Definition: socket_api.c:66
struct _vlib_node_registration vlib_node_registration_t
void vl_api_force_rpc_call_main_thread(void *fp, u8 *data, u32 data_length)
Definition: vlib_api.c:619
clib_error_t * vl_sock_api_send_fd_msg(int socket_fd, int fds[], int n_fds)
Definition: socket_api.c:515
u64 uword
Definition: types.h:112
Definition: file.h:51
histogram_index_t
Definition: api.h:121
void vl_socket_process_msg(struct clib_file *uf, struct vl_api_registration_ *rp, i8 *input_v)
void socksvr_add_pending_output(struct clib_file *uf, struct vl_api_registration_ *cf, u8 *buffer, uword buffer_bytes)