FD.io VPP
v19.08.2-294-g37e99c22d
Vector Packet Processing
socket_api.h
Go to the documentation of this file.
1
/*
2
*------------------------------------------------------------------
3
* Copyright (c) 2018 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 SRC_VLIBMEMORY_SOCKET_API_H_
19
#define SRC_VLIBMEMORY_SOCKET_API_H_
20
21
#include <
vlibapi/api_common.h
>
22
#include <
svm/ssvm.h
>
23
#include <
vppinfra/file.h
>
24
25
#define API_SOCKET_FILE "/run/vpp-api.sock"
26
27
typedef
struct
28
{
29
u32
reg_index
;
30
u8
*
data
;
31
}
vl_socket_args_for_process_t
;
32
33
typedef
struct
34
{
35
/* Server port number */
36
u8
*
socket_name
;
37
38
/* By default, localhost... */
39
u32
bind_address
;
40
41
/*
42
* (listen, server, client) registrations. Shared memory
43
* registrations are in shared memory
44
*/
45
vl_api_registration_t
*
registration_pool
;
46
/*
47
* Chain-drag variables, so message API handlers
48
* (generally) don't know whether they're talking to a socket
49
* or to a shared-memory connection.
50
*/
51
vl_api_registration_t
*
current_rp
;
52
/* One input buffer, shared across all sockets */
53
i8
*
input_buffer
;
54
55
/* pool of process args for socket clients */
56
vl_socket_args_for_process_t
*
process_args
;
57
58
/* Listen for API connections here */
59
clib_socket_t
socksvr_listen_socket
;
60
}
socket_main_t
;
61
62
extern
socket_main_t
socket_main
;
63
64
always_inline
vl_api_registration_t
*
65
vl_socket_get_registration
(
u32
reg_index)
66
{
67
if
(
pool_is_free_index
(socket_main.
registration_pool
, reg_index))
68
return
0;
69
return
pool_elt_at_index
(socket_main.
registration_pool
, reg_index);
70
}
71
72
void
vl_socket_free_registration_index
(
u32
pool_index);
73
clib_error_t
*
vl_socket_read_ready
(
struct
clib_file
*uf);
74
clib_error_t
*
vl_socket_write_ready
(
struct
clib_file
*uf);
75
void
vl_socket_api_send
(
vl_api_registration_t
* rp,
u8
* elem);
76
void
vl_socket_process_api_msg
(
vl_api_registration_t
* rp,
i8
* input_v);
77
void
vl_sock_api_dump_clients
(
vlib_main_t
* vm,
api_main_t
* am);
78
clib_error_t
*
vl_sock_api_init
(
vlib_main_t
* vm);
79
clib_error_t
*
vl_sock_api_send_fd_msg
(
int
socket_fd,
int
fds[],
int
n_fds);
80
clib_error_t
*
vl_sock_api_recv_fd_msg
(
int
socket_fd,
int
fds[],
int
n_fds,
81
u32
wait);
82
83
vl_api_registration_t
*
vl_socket_api_client_handle_to_registration
(
u32
idx);
84
u8
vl_socket_api_registration_handle_is_valid
(
u32
reg_index);
85
86
#endif
/* SRC_VLIBMEMORY_SOCKET_API_H_ */
87
88
/*
89
* fd.io coding-style-patch-verification: ON
90
*
91
* Local Variables:
92
* eval: (c-set-style "gnu")
93
* End:
94
*/
vl_socket_process_api_msg
void vl_socket_process_api_msg(vl_api_registration_t *rp, i8 *input_v)
Definition:
socket_api.c:193
vl_socket_free_registration_index
void vl_socket_free_registration_index(u32 pool_index)
Definition:
socket_api.c:169
socket_main_t::registration_pool
vl_api_registration_t * registration_pool
Definition:
socket_api.h:45
vl_sock_api_dump_clients
void vl_sock_api_dump_clients(vlib_main_t *vm, api_main_t *am)
Definition:
socket_api.c:72
vl_socket_read_ready
clib_error_t * vl_socket_read_ready(struct clib_file *uf)
Definition:
socket_api.c:220
socket_main_t::current_rp
vl_api_registration_t * current_rp
Definition:
socket_api.h:51
socket_main_t::process_args
vl_socket_args_for_process_t * process_args
Definition:
socket_api.h:56
u8
unsigned char u8
Definition:
types.h:56
vl_sock_api_recv_fd_msg
clib_error_t * vl_sock_api_recv_fd_msg(int socket_fd, int fds[], int n_fds, u32 wait)
Definition:
socket_client.c:200
vl_socket_get_registration
static vl_api_registration_t * vl_socket_get_registration(u32 reg_index)
Definition:
socket_api.h:65
file.h
vl_socket_args_for_process_t::data
u8 * data
Definition:
socket_api.h:30
always_inline
#define always_inline
Definition:
clib.h:99
u32
unsigned int u32
Definition:
types.h:88
socket_main_t::socket_name
u8 * socket_name
Definition:
socket_api.h:36
pool_elt_at_index
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition:
pool.h:514
socket_main_t::bind_address
u32 bind_address
Definition:
socket_api.h:39
vl_socket_write_ready
clib_error_t * vl_socket_write_ready(struct clib_file *uf)
Definition:
socket_api.c:338
vl_socket_api_client_handle_to_registration
vl_api_registration_t * vl_socket_api_client_handle_to_registration(u32 idx)
Definition:
socket_api.c:99
i8
signed char i8
Definition:
types.h:45
ssvm.h
api_main_t
API main structure, used by both vpp and binary API clients.
Definition:
api_common.h:203
vl_socket_args_for_process_t
Definition:
socket_api.h:27
vl_api_registration_
An API client registration, only in vpp/vlib.
Definition:
api_common.h:46
socket_main_t::socksvr_listen_socket
clib_socket_t socksvr_listen_socket
Definition:
socket_api.h:59
pool_is_free_index
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
Definition:
pool.h:283
socket_main_t
Definition:
socket_api.h:33
vl_socket_api_registration_handle_is_valid
u8 vl_socket_api_registration_handle_is_valid(u32 reg_index)
Definition:
socket_api.c:66
clib_socket_t
struct _socket_t clib_socket_t
socket_main
socket_main_t socket_main
Definition:
socket_api.c:48
clib_error_t
Definition:
clib_error.h:21
vlib_main_t
Definition:
main.h:83
vl_socket_args_for_process_t::reg_index
u32 reg_index
Definition:
socket_api.h:29
socket_main_t::input_buffer
i8 * input_buffer
Definition:
socket_api.h:53
vl_sock_api_send_fd_msg
clib_error_t * vl_sock_api_send_fd_msg(int socket_fd, int fds[], int n_fds)
Definition:
socket_api.c:515
api_common.h
clib_file
Definition:
file.h:51
vl_socket_api_send
void vl_socket_api_send(vl_api_registration_t *rp, u8 *elem)
Definition:
socket_api.c:114
vl_sock_api_init
clib_error_t * vl_sock_api_init(vlib_main_t *vm)
Definition:
socket_api.c:719
src
vlibmemory
socket_api.h
Generated on Tue Aug 25 2020 19:17:49 for FD.io VPP by
1.8.13