2017-08-03 02:11:34 -04:00
|
|
|
/*
|
2020-06-15 07:59:40 -07:00
|
|
|
* Copyright (c) 2017-2020 Cisco and/or its affiliates.
|
2017-08-03 02:11:34 -04:00
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef included_vppcom_h
|
|
|
|
#define included_vppcom_h
|
|
|
|
|
2024-01-30 16:21:58 +00:00
|
|
|
#ifdef __FreeBSD__
|
|
|
|
#include <sys/types.h>
|
|
|
|
#endif /* __FreeBSD__ */
|
2017-08-03 02:11:34 -04:00
|
|
|
#include <netdb.h>
|
|
|
|
#include <errno.h>
|
2023-01-10 15:37:18 +01:00
|
|
|
#include <fcntl.h>
|
|
|
|
#include <poll.h>
|
2017-10-03 01:48:42 -04:00
|
|
|
#include <sys/epoll.h>
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2023-02-07 17:36:17 -08:00
|
|
|
/* clang-format off */
|
|
|
|
|
2018-02-02 08:21:56 -08:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C"
|
|
|
|
{
|
|
|
|
#endif
|
|
|
|
|
2017-08-03 02:11:34 -04:00
|
|
|
/*
|
|
|
|
* VPPCOM Public API Definitions, Enums, and Data Structures
|
|
|
|
*/
|
2019-01-04 17:05:43 -08:00
|
|
|
#define INVALID_SESSION_ID ((u32)~0)
|
2018-08-02 10:45:44 -07:00
|
|
|
#define VPPCOM_CONF_DEFAULT "/etc/vpp/vcl.conf"
|
|
|
|
#define VPPCOM_ENV_CONF "VCL_CONFIG"
|
|
|
|
#define VPPCOM_ENV_DEBUG "VCL_DEBUG"
|
|
|
|
#define VPPCOM_ENV_APP_PROXY_TRANSPORT_TCP "VCL_APP_PROXY_TRANSPORT_TCP"
|
|
|
|
#define VPPCOM_ENV_APP_PROXY_TRANSPORT_UDP "VCL_APP_PROXY_TRANSPORT_UDP"
|
|
|
|
#define VPPCOM_ENV_APP_NAMESPACE_ID "VCL_APP_NAMESPACE_ID"
|
|
|
|
#define VPPCOM_ENV_APP_NAMESPACE_SECRET "VCL_APP_NAMESPACE_SECRET"
|
|
|
|
#define VPPCOM_ENV_APP_SCOPE_LOCAL "VCL_APP_SCOPE_LOCAL"
|
|
|
|
#define VPPCOM_ENV_APP_SCOPE_GLOBAL "VCL_APP_SCOPE_GLOBAL"
|
2022-02-09 08:35:26 +00:00
|
|
|
#define VPPCOM_ENV_APP_USE_MQ_EVENTFD "VCL_APP_USE_MQ_EVENTFD"
|
2018-08-02 10:45:44 -07:00
|
|
|
#define VPPCOM_ENV_VPP_API_SOCKET "VCL_VPP_API_SOCKET"
|
2020-11-08 18:04:33 -08:00
|
|
|
#define VPPCOM_ENV_VPP_SAPI_SOCKET "VCL_VPP_SAPI_SOCKET"
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2023-02-07 17:36:17 -08:00
|
|
|
typedef enum vppcom_proto_
|
|
|
|
{
|
|
|
|
VPPCOM_PROTO_TCP = 0,
|
|
|
|
VPPCOM_PROTO_UDP,
|
|
|
|
VPPCOM_PROTO_NONE,
|
|
|
|
VPPCOM_PROTO_TLS,
|
|
|
|
VPPCOM_PROTO_QUIC,
|
|
|
|
VPPCOM_PROTO_DTLS,
|
|
|
|
VPPCOM_PROTO_SRTP,
|
2024-08-28 14:02:34 -07:00
|
|
|
VPPCOM_PROTO_HTTP,
|
2023-02-07 17:36:17 -08:00
|
|
|
} vppcom_proto_t;
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
VPPCOM_IS_IP6 = 0,
|
|
|
|
VPPCOM_IS_IP4,
|
|
|
|
} vppcom_is_ip4_t;
|
|
|
|
|
|
|
|
typedef struct vppcom_endpt_tlv_t_
|
|
|
|
{
|
|
|
|
uint32_t data_type;
|
|
|
|
uint32_t data_len;
|
|
|
|
uint8_t data[0];
|
|
|
|
} vppcom_endpt_tlv_t;
|
|
|
|
|
|
|
|
typedef struct vppcom_endpt_t_
|
|
|
|
{
|
|
|
|
uint8_t unused; /**< unused */
|
|
|
|
uint8_t is_ip4; /**< flag set if if ip is ipv4 */
|
|
|
|
uint8_t *ip; /**< pointer to ip address */
|
|
|
|
uint16_t port; /**< transport port */
|
|
|
|
uint64_t unused2; /**< unused */
|
|
|
|
uint32_t app_tlv_len; /**< length of app provided tlvs */
|
|
|
|
vppcom_endpt_tlv_t *app_tlvs; /**< array of app provided tlvs */
|
|
|
|
} vppcom_endpt_t;
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2022-11-29 19:41:34 +08:00
|
|
|
#define VCL_UDP_OPTS_BASE (VPPCOM_PROTO_UDP << 16)
|
|
|
|
#define VCL_UDP_SEGMENT (VCL_UDP_OPTS_BASE + 0)
|
|
|
|
|
2023-02-07 17:36:17 -08:00
|
|
|
/* By convention we'll use 127 for IP since we don't support IP as protocol */
|
|
|
|
#define VCL_IP_OPTS_BASE (127 << 16)
|
|
|
|
#define VCL_IP_PKTINFO (VCL_IP_OPTS_BASE + 1)
|
|
|
|
|
|
|
|
#define VCL_EP_APP_TLV_LEN(tlv_) (sizeof (vppcom_endpt_tlv_t) + tlv->data_len)
|
|
|
|
#define VCL_EP_APP_TLV_POS(ep_, tlv_) ((void *)ep_->app_tlvs - (void *)tlv_)
|
|
|
|
#define VCL_EP_APP_TLV_LEN_LEFT(ep_, tlv_) \
|
|
|
|
(ep_->app_tlv_len - VCL_EP_APP_TLV_POS (ep_, tlv_))
|
|
|
|
#define VCL_EP_NEXT_APP_TLV(ep_, tlv_) \
|
|
|
|
(VCL_EP_APP_TLV_LEN (tlv_) < VCL_EP_APP_TLV_POS (ep_, tlv_) ? ( \
|
|
|
|
(vppcom_endpt_tlv_t *)((uint8_t *)tlv_ + VCL_EP_APP_TLV_LEN (tlv_))) \
|
|
|
|
: 0)
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2019-01-02 19:31:22 -08:00
|
|
|
typedef uint32_t vcl_session_handle_t;
|
|
|
|
|
2021-01-05 17:03:29 -08:00
|
|
|
typedef struct vppcom_cert_key_pair_
|
|
|
|
{
|
|
|
|
char *cert;
|
|
|
|
char *key;
|
|
|
|
uint32_t cert_len;
|
|
|
|
uint32_t key_len;
|
|
|
|
} vppcom_cert_key_pair_t;
|
|
|
|
|
2017-08-03 02:11:34 -04:00
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
VPPCOM_OK = 0,
|
|
|
|
VPPCOM_EAGAIN = -EAGAIN,
|
2018-07-17 10:46:29 -07:00
|
|
|
VPPCOM_EWOULDBLOCK = -EWOULDBLOCK,
|
2019-08-29 12:03:17 -07:00
|
|
|
VPPCOM_EINPROGRESS = -EINPROGRESS,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_EFAULT = -EFAULT,
|
2017-11-10 17:07:13 -05:00
|
|
|
VPPCOM_ENOMEM = -ENOMEM,
|
2017-08-03 02:11:34 -04:00
|
|
|
VPPCOM_EINVAL = -EINVAL,
|
2024-01-30 16:21:58 +00:00
|
|
|
#ifdef __linux__
|
2017-08-03 02:11:34 -04:00
|
|
|
VPPCOM_EBADFD = -EBADFD,
|
2024-01-30 16:21:58 +00:00
|
|
|
#else
|
|
|
|
VPPCOM_EBADFD = -EBADF,
|
|
|
|
#endif /* __linux__ */
|
2017-08-03 02:11:34 -04:00
|
|
|
VPPCOM_EAFNOSUPPORT = -EAFNOSUPPORT,
|
2017-11-24 21:44:06 -05:00
|
|
|
VPPCOM_ECONNABORTED = -ECONNABORTED,
|
2017-08-03 02:11:34 -04:00
|
|
|
VPPCOM_ECONNRESET = -ECONNRESET,
|
2017-11-21 03:45:09 -05:00
|
|
|
VPPCOM_ENOTCONN = -ENOTCONN,
|
2017-08-03 02:11:34 -04:00
|
|
|
VPPCOM_ECONNREFUSED = -ECONNREFUSED,
|
|
|
|
VPPCOM_ETIMEDOUT = -ETIMEDOUT,
|
2021-04-12 19:55:37 -07:00
|
|
|
VPPCOM_EEXIST = -EEXIST,
|
2021-06-04 15:59:41 -07:00
|
|
|
VPPCOM_ENOPROTOOPT = -ENOPROTOOPT,
|
2021-06-13 14:54:55 +08:00
|
|
|
VPPCOM_EPIPE = -EPIPE,
|
2021-06-04 15:59:41 -07:00
|
|
|
VPPCOM_ENOENT = -ENOENT,
|
2022-10-06 18:17:05 +02:00
|
|
|
VPPCOM_EADDRINUSE = -EADDRINUSE,
|
|
|
|
VPPCOM_ENOTSUP = -ENOTSUP
|
2017-08-03 02:11:34 -04:00
|
|
|
} vppcom_error_t;
|
|
|
|
|
2017-10-09 01:43:42 -04:00
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
VPPCOM_ATTR_GET_NREAD,
|
2017-11-13 21:21:53 -05:00
|
|
|
VPPCOM_ATTR_GET_NWRITE,
|
2017-10-09 01:43:42 -04:00
|
|
|
VPPCOM_ATTR_GET_FLAGS,
|
|
|
|
VPPCOM_ATTR_SET_FLAGS,
|
|
|
|
VPPCOM_ATTR_GET_LCL_ADDR,
|
2019-10-17 09:56:27 -07:00
|
|
|
VPPCOM_ATTR_SET_LCL_ADDR,
|
2017-10-09 01:43:42 -04:00
|
|
|
VPPCOM_ATTR_GET_PEER_ADDR,
|
2024-11-26 00:29:24 -08:00
|
|
|
VPPCOM_ATTR_GET_UNUSED,
|
|
|
|
VPPCOM_ATTR_SET_UNUSED,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_PROTOCOL,
|
|
|
|
VPPCOM_ATTR_GET_LISTEN,
|
|
|
|
VPPCOM_ATTR_GET_ERROR,
|
|
|
|
VPPCOM_ATTR_GET_TX_FIFO_LEN,
|
|
|
|
VPPCOM_ATTR_SET_TX_FIFO_LEN,
|
|
|
|
VPPCOM_ATTR_GET_RX_FIFO_LEN,
|
|
|
|
VPPCOM_ATTR_SET_RX_FIFO_LEN,
|
|
|
|
VPPCOM_ATTR_GET_REUSEADDR,
|
2017-10-11 09:59:30 -07:00
|
|
|
VPPCOM_ATTR_SET_REUSEADDR,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_REUSEPORT,
|
|
|
|
VPPCOM_ATTR_SET_REUSEPORT,
|
|
|
|
VPPCOM_ATTR_GET_BROADCAST,
|
2017-10-11 09:59:30 -07:00
|
|
|
VPPCOM_ATTR_SET_BROADCAST,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_V6ONLY,
|
2017-10-11 09:59:30 -07:00
|
|
|
VPPCOM_ATTR_SET_V6ONLY,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_KEEPALIVE,
|
2017-10-12 20:42:21 -07:00
|
|
|
VPPCOM_ATTR_SET_KEEPALIVE,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_TCP_NODELAY,
|
|
|
|
VPPCOM_ATTR_SET_TCP_NODELAY,
|
|
|
|
VPPCOM_ATTR_GET_TCP_KEEPIDLE,
|
2017-10-12 20:42:21 -07:00
|
|
|
VPPCOM_ATTR_SET_TCP_KEEPIDLE,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_TCP_KEEPINTVL,
|
2017-10-12 20:42:21 -07:00
|
|
|
VPPCOM_ATTR_SET_TCP_KEEPINTVL,
|
2018-01-03 22:24:41 -05:00
|
|
|
VPPCOM_ATTR_GET_TCP_USER_MSS,
|
|
|
|
VPPCOM_ATTR_SET_TCP_USER_MSS,
|
2020-05-16 18:18:14 +00:00
|
|
|
VPPCOM_ATTR_SET_CONNECTED,
|
2021-01-05 17:03:29 -08:00
|
|
|
VPPCOM_ATTR_SET_CKPAIR,
|
2021-01-28 11:39:27 -08:00
|
|
|
VPPCOM_ATTR_SET_VRF,
|
|
|
|
VPPCOM_ATTR_GET_VRF,
|
2021-02-22 10:38:36 +08:00
|
|
|
VPPCOM_ATTR_GET_DOMAIN,
|
2021-05-01 16:01:40 -07:00
|
|
|
VPPCOM_ATTR_SET_ENDPT_EXT_CFG,
|
2021-11-15 10:26:56 +00:00
|
|
|
VPPCOM_ATTR_SET_DSCP,
|
2023-02-07 17:36:17 -08:00
|
|
|
VPPCOM_ATTR_SET_IP_PKTINFO,
|
|
|
|
VPPCOM_ATTR_GET_IP_PKTINFO,
|
2023-06-27 01:11:53 -07:00
|
|
|
VPPCOM_ATTR_GET_ORIGINAL_DST,
|
2024-03-18 12:25:38 -07:00
|
|
|
VPPCOM_ATTR_GET_NWRITEQ,
|
2024-10-03 00:34:03 -07:00
|
|
|
VPPCOM_ATTR_GET_EXT_ENDPT,
|
2017-10-09 01:43:42 -04:00
|
|
|
} vppcom_attr_op_t;
|
|
|
|
|
2018-01-03 22:24:41 -05:00
|
|
|
typedef struct _vcl_poll
|
|
|
|
{
|
|
|
|
uint32_t fds_ndx;
|
2019-01-04 17:05:43 -08:00
|
|
|
vcl_session_handle_t sh;
|
2018-01-03 22:24:41 -05:00
|
|
|
short events;
|
2018-11-13 22:44:54 -08:00
|
|
|
short revents;
|
2018-01-03 22:24:41 -05:00
|
|
|
} vcl_poll_t;
|
|
|
|
|
2018-09-11 16:33:36 -07:00
|
|
|
typedef struct vppcom_data_segment_
|
|
|
|
{
|
|
|
|
unsigned char *data;
|
|
|
|
uint32_t len;
|
|
|
|
} vppcom_data_segment_t;
|
|
|
|
|
|
|
|
typedef vppcom_data_segment_t vppcom_data_segments_t[2];
|
|
|
|
|
2019-01-07 17:49:17 -08:00
|
|
|
typedef unsigned long vcl_si_set;
|
|
|
|
|
2017-08-03 02:11:34 -04:00
|
|
|
/*
|
|
|
|
* VPPCOM Public API Functions
|
|
|
|
*/
|
2017-11-19 11:20:02 -05:00
|
|
|
|
2020-06-15 07:59:40 -07:00
|
|
|
extern int vppcom_app_create (const char *app_name);
|
2017-08-03 02:11:34 -04:00
|
|
|
extern void vppcom_app_destroy (void);
|
|
|
|
|
2018-02-07 18:14:02 -05:00
|
|
|
extern int vppcom_session_create (uint8_t proto, uint8_t is_nonblocking);
|
2021-06-13 14:54:55 +08:00
|
|
|
extern int vppcom_session_shutdown (uint32_t session_handle, int how);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_close (uint32_t session_handle);
|
|
|
|
extern int vppcom_session_bind (uint32_t session_handle, vppcom_endpt_t * ep);
|
|
|
|
extern int vppcom_session_listen (uint32_t session_handle, uint32_t q_len);
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_accept (uint32_t session_handle,
|
2018-01-03 22:24:41 -05:00
|
|
|
vppcom_endpt_t * client_ep, uint32_t flags);
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_connect (uint32_t session_handle,
|
2017-08-03 02:11:34 -04:00
|
|
|
vppcom_endpt_t * server_ep);
|
2019-05-16 14:38:44 +02:00
|
|
|
extern int vppcom_session_stream_connect (uint32_t session_handle,
|
|
|
|
uint32_t parent_session_handle);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_read (uint32_t session_handle, void *buf, size_t n);
|
|
|
|
extern int vppcom_session_write (uint32_t session_handle, void *buf,
|
|
|
|
size_t n);
|
2018-12-27 14:51:46 -08:00
|
|
|
extern int vppcom_session_write_msg (uint32_t session_handle, void *buf,
|
|
|
|
size_t n);
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2019-01-07 17:49:17 -08:00
|
|
|
extern int vppcom_select (int n_bits, vcl_si_set * read_map,
|
|
|
|
vcl_si_set * write_map, vcl_si_set * except_map,
|
|
|
|
double wait_for_time);
|
2017-08-03 02:11:34 -04:00
|
|
|
|
2017-10-03 01:48:42 -04:00
|
|
|
extern int vppcom_epoll_create (void);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_epoll_ctl (uint32_t vep_handle, int op,
|
|
|
|
uint32_t session_handle,
|
2017-10-03 01:48:42 -04:00
|
|
|
struct epoll_event *event);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_epoll_wait (uint32_t vep_handle, struct epoll_event *events,
|
2017-10-03 01:48:42 -04:00
|
|
|
int maxevents, double wait_for_time);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_attr (uint32_t session_handle, uint32_t op,
|
2017-10-09 01:43:42 -04:00
|
|
|
void *buffer, uint32_t * buflen);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_recvfrom (uint32_t session_handle, void *buffer,
|
2017-10-24 16:03:58 -07:00
|
|
|
uint32_t buflen, int flags,
|
|
|
|
vppcom_endpt_t * ep);
|
2018-08-28 11:32:04 -07:00
|
|
|
extern int vppcom_session_sendto (uint32_t session_handle, void *buffer,
|
2017-10-24 16:03:58 -07:00
|
|
|
uint32_t buflen, int flags,
|
|
|
|
vppcom_endpt_t * ep);
|
2018-01-03 22:24:41 -05:00
|
|
|
extern int vppcom_poll (vcl_poll_t * vp, uint32_t n_sids,
|
|
|
|
double wait_for_time);
|
2018-08-02 10:45:44 -07:00
|
|
|
extern int vppcom_mq_epoll_fd (void);
|
2019-01-02 19:31:22 -08:00
|
|
|
extern int vppcom_session_index (vcl_session_handle_t session_handle);
|
|
|
|
extern int vppcom_session_worker (vcl_session_handle_t session_handle);
|
2018-08-28 11:32:04 -07:00
|
|
|
|
2018-09-11 16:33:36 -07:00
|
|
|
extern int vppcom_session_read_segments (uint32_t session_handle,
|
2020-09-25 15:18:13 -07:00
|
|
|
vppcom_data_segment_t * ds,
|
|
|
|
uint32_t n_segments,
|
|
|
|
uint32_t max_bytes);
|
2024-08-27 18:05:17 -07:00
|
|
|
extern int vppcom_session_write_segments (uint32_t session_handle,
|
|
|
|
vppcom_data_segment_t * ds,
|
|
|
|
uint32_t n_segments);
|
2018-09-11 16:33:36 -07:00
|
|
|
extern void vppcom_session_free_segments (uint32_t session_handle,
|
2020-09-25 15:18:13 -07:00
|
|
|
uint32_t n_bytes);
|
2021-01-05 17:03:29 -08:00
|
|
|
extern int vppcom_add_cert_key_pair (vppcom_cert_key_pair_t *ckpair);
|
|
|
|
extern int vppcom_del_cert_key_pair (uint32_t ckpair_index);
|
2019-05-16 14:38:44 +02:00
|
|
|
extern int vppcom_unformat_proto (uint8_t * proto, char *proto_str);
|
|
|
|
extern int vppcom_session_is_connectable_listener (uint32_t session_handle);
|
|
|
|
extern int vppcom_session_listener (uint32_t session_handle);
|
|
|
|
extern int vppcom_session_n_accepted (uint32_t session_handle);
|
2018-09-11 16:33:36 -07:00
|
|
|
|
2020-06-15 07:59:40 -07:00
|
|
|
extern const char *vppcom_proto_str (vppcom_proto_t proto);
|
|
|
|
extern const char *vppcom_retval_str (int retval);
|
|
|
|
|
2018-08-28 11:32:04 -07:00
|
|
|
/**
|
|
|
|
* Request from application to register a new worker
|
|
|
|
*
|
|
|
|
* Expectation is that applications will make use of this after a new pthread
|
|
|
|
* is spawned.
|
|
|
|
*/
|
|
|
|
extern int vppcom_worker_register (void);
|
2017-10-03 01:48:42 -04:00
|
|
|
|
2019-07-08 12:34:45 -07:00
|
|
|
/**
|
|
|
|
* Unregister current worker
|
|
|
|
*/
|
|
|
|
extern void vppcom_worker_unregister (void);
|
|
|
|
|
2018-11-28 22:13:45 -08:00
|
|
|
/**
|
|
|
|
* Retrieve current worker index
|
|
|
|
*/
|
|
|
|
extern int vppcom_worker_index (void);
|
|
|
|
|
2020-05-04 17:57:33 +02:00
|
|
|
/**
|
|
|
|
* Set current worker index
|
|
|
|
*/
|
|
|
|
extern void vppcom_worker_index_set (int);
|
|
|
|
|
2019-01-25 13:19:56 -08:00
|
|
|
/**
|
|
|
|
* Returns the current worker's message queues epoll fd
|
|
|
|
*
|
|
|
|
* This only works if vcl is configured to do eventfd based message queue
|
|
|
|
* notifications.
|
|
|
|
*/
|
|
|
|
extern int vppcom_worker_mqs_epfd (void);
|
|
|
|
|
2022-07-18 19:41:05 +05:30
|
|
|
/**
|
|
|
|
* Returns Session error
|
|
|
|
*
|
|
|
|
* Application can use this API to find the detailed session error
|
|
|
|
*/
|
|
|
|
extern int vppcom_session_get_error (uint32_t session_handle);
|
|
|
|
|
2022-10-06 18:17:05 +02:00
|
|
|
/**
|
|
|
|
* Returns true if current worker is disconnected from vpp
|
|
|
|
*
|
|
|
|
* Application can use this API to check if VPP is disconnected
|
|
|
|
* as long as `use-mq-eventfd` is being set
|
|
|
|
*/
|
|
|
|
extern int vppcom_worker_is_detached (void);
|
|
|
|
|
2018-02-02 08:21:56 -08:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
2023-02-07 17:36:17 -08:00
|
|
|
/* clang-format on */
|
2018-02-02 08:21:56 -08:00
|
|
|
|
2017-08-03 02:11:34 -04:00
|
|
|
#endif /* included_vppcom_h */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* fd.io coding-style-patch-verification: ON
|
|
|
|
*
|
|
|
|
* Local Variables:
|
|
|
|
* eval: (c-set-style "gnu")
|
|
|
|
* End:
|
|
|
|
*/
|