Add VPP Communications Library (VCL)

- VCL library
- client/server test application
- test script (make test integration tbd)
- gdb command file templates
- vppcom test config file

Change-Id: I21eab7aa09b4e5dc3412acf5c2eab07415c2fc0f
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
This commit is contained in:
Dave Wallace
2017-08-03 02:11:34 -04:00
committed by Florin Coras
parent 7faab8d3a5
commit 543852a46c
13 changed files with 5459 additions and 1 deletions

View File

@ -0,0 +1,10 @@
echo \n\n====== gdb_cmdfile.vppcom_client ======\n
# Here are some interesting vppcom breakpoints...
# Uncomment them out to set during gdb init.
#
#b vppcom_session_connect
#b vppcom_session_write
#b vppcom_session_read
#b vl_api_connect_sock_t_handler
#b vl_api_connect_sock_reply_t_handler

View File

@ -0,0 +1,10 @@
echo \n\n====== gdb_cmdfile.vppcom_server ======\n
# Here are some interesting vppcom breakpoints...
# Uncomment them out to set during gdb init.
#
#b vppcom_session_accept
#b vppcom_session_write
#b vppcom_session_read
#b vl_api_connect_sock_t_handler
#b vl_api_connect_sock_reply_t_handler

View File

@ -0,0 +1,7 @@
echo \n\n====== gdb_cmdfile.vpp ======\n
# Here are some interesting vpp-api breakpoints...
# Uncomment them out to set during gdb init.
#
#b vl_api_connect_sock_t_handler
#b vl_api_connect_sock_reply_t_handler

View File

@ -11,7 +11,34 @@
# See the License for the specific language governing permissions and
# limitations under the License.
noinst_PROGRAMS += uri_udp_test uri_tcp_test uri_socket_test uri_socket_server
lib_LTLIBRARIES += libvppcom.la
libvppcom_la_SOURCES =
libvppcom_la_DEPENDENCIES = \
libvppinfra.la \
libvlib.la \
libsvmdb.la \
libsvm.la \
libvlibmemory.la \
libvlibmemoryclient.la
libvppcom_la_LIBADD = $(libvppcom_la_DEPENDENCIES) -lpthread
libvppcom_la_SOURCES += \
uri/vppcom.c
nobase_include_HEADERS += \
uri/vppcom.h
noinst_PROGRAMS += \
uri_udp_test \
uri_tcp_test \
uri_socket_test \
uri_socket_server \
vcl_test_server \
vcl_test_client \
sock_test_server \
sock_test_client
uri_udp_test_SOURCES = uri/uri_udp_test.c
uri_udp_test_LDADD = libvlibmemoryclient.la libsvm.la \
@ -26,3 +53,15 @@ uri_socket_test_LDADD = libvppinfra.la -lpthread -lm -lrt
uri_socket_server_SOURCES = uri/uri_socket_server.c
uri_socket_server_LDADD = libvppinfra.la -lpthread -lm -lrt
vcl_test_server_SOURCES = uri/vcl_test_server.c
vcl_test_server_LDADD = libvppcom.la
vcl_test_client_SOURCES = uri/vcl_test_client.c
vcl_test_client_LDADD = libvppcom.la
sock_test_server_SOURCES = uri/sock_test_server.c
sock_test_client_SOURCES = uri/sock_test_client.c
nobase_include_HEADERS += \
uri/sock_test.h

415
src/uri/sock_test.h Normal file

File diff suppressed because it is too large Load Diff

1070
src/uri/sock_test_client.c Normal file

File diff suppressed because it is too large Load Diff

586
src/uri/sock_test_server.c Normal file

File diff suppressed because it is too large Load Diff

27
src/uri/vcl_test_client.c Normal file
View File

@ -0,0 +1,27 @@
/*
* Copyright (c) 2017 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.
*/
#define VCL_TEST
#include <uri/vppcom.h>
#include <uri/sock_test_client.c>
/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "gnu")
* End:
*/

27
src/uri/vcl_test_server.c Normal file
View File

@ -0,0 +1,27 @@
/*
* Copyright (c) 2017 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.
*/
#define VCL_TEST
#include <uri/vppcom.h>
#include <uri/sock_test_server.c>
/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "gnu")
* End:
*/

2453
src/uri/vppcom.c Normal file

File diff suppressed because it is too large Load Diff

152
src/uri/vppcom.h Normal file
View File

@ -0,0 +1,152 @@
/*
* Copyright (c) 2017 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.
*/
#ifndef included_vppcom_h
#define included_vppcom_h
#include <netdb.h>
#include <errno.h>
/*
* VPPCOM Public API Definitions, Enums, and Data Structures
*/
#define INVALID_SESSION_ID (~0)
#define VPPCOM_VRF_DEFAULT 0
#define VPPCOM_CONF_ENV "VPPCOM_CONF"
#define VPPCOM_CONF_DEFAULT "/etc/vpp/vppcom.conf"
typedef enum
{
VPPCOM_PROTO_TCP = 0,
VPPCOM_PROTO_UDP,
} vppcom_proto_t;
typedef enum
{
VPPCOM_IS_IP6 = 0,
VPPCOM_IS_IP4,
} vppcom_is_ip4_t;
typedef struct vppcom_endpt_t_
{
uint32_t vrf;
uint8_t is_cut_thru;
uint8_t is_ip4;
uint8_t *ip;
uint16_t port;
} vppcom_endpt_t;
typedef enum
{
VPPCOM_OK = 0,
VPPCOM_EAGAIN = -EAGAIN,
VPPCOM_EINVAL = -EINVAL,
VPPCOM_EBADFD = -EBADFD,
VPPCOM_EAFNOSUPPORT = -EAFNOSUPPORT,
VPPCOM_ECONNRESET = -ECONNRESET,
VPPCOM_ECONNREFUSED = -ECONNREFUSED,
VPPCOM_ETIMEDOUT = -ETIMEDOUT,
} vppcom_error_t;
/*
* VPPCOM Public API Functions
*/
static inline const char *
vppcom_retval_str (int retval)
{
char *st;
switch (retval)
{
case VPPCOM_OK:
st = "VPPCOM_OK";
break;
case VPPCOM_EAGAIN:
st = "VPPCOM_EAGAIN";
break;
case VPPCOM_EINVAL:
st = "VPPCOM_EINVAL";
break;
case VPPCOM_EBADFD:
st = "VPPCOM_EBADFD";
break;
case VPPCOM_EAFNOSUPPORT:
st = "VPPCOM_EAFNOSUPPORT";
break;
case VPPCOM_ECONNRESET:
st = "VPPCOM_ECONNRESET";
break;
case VPPCOM_ECONNREFUSED:
st = "VPPCOM_ECONNREFUSED";
break;
case VPPCOM_ETIMEDOUT:
st = "VPPCOM_ETIMEDOUT";
break;
default:
st = "UNKNOWN_STATE";
break;
}
return st;
}
static inline int
is_vcom_fd (int fd)
{
#define VPPCOM_FD_OFFSET (1 << 30)
return (fd >= VPPCOM_FD_OFFSET);
}
/* TBD: make these constructor/destructor function */
extern int vppcom_app_create (char *app_name);
extern void vppcom_app_destroy (void);
extern int vppcom_session_create (uint32_t vrf, uint8_t proto,
uint8_t is_nonblocking);
extern int vppcom_session_close (uint32_t session_index);
extern int vppcom_session_bind (uint32_t session_index, vppcom_endpt_t * ep);
extern int vppcom_session_listen (uint32_t session_index, uint32_t q_len);
extern int vppcom_session_accept (uint32_t session_index,
vppcom_endpt_t * client_ep,
double wait_for_time);
extern int vppcom_session_connect (uint32_t session_index,
vppcom_endpt_t * server_ep);
extern int vppcom_session_read (uint32_t session_index, void *buf, int n);
extern int vppcom_session_write (uint32_t session_index, void *buf, int n);
extern int vppcom_select (unsigned long n_bits,
unsigned long *read_map,
unsigned long *write_map,
unsigned long *except_map, double wait_for_time);
#endif /* included_vppcom_h */
/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "gnu")
* End:
*/

25
src/uri/vppcom_test.conf Normal file
View File

@ -0,0 +1,25 @@
# Test VPPCOM config file
vppcom {
heapsize 1
api-prefix daw # this is a comment
uid 1020 this is also a comment.
gid 1020
# This is yet another comment!
segment-baseva 0x300000000
segment-size 0x10000000
segment-size 268435456
add-segment-size 0x1000000
add-segment-size 134217728
preallocated-fifo-pairs 16
rx-fifo-size 3145728
rx-fifo-size 0x300000
tx-fifo-size 3145728
tx-fifo-size 0x300000
event-queue-size 1024
event-queue-size 0x400
listen-queue-size 32
listen-queue-size 0x20
app-timeout 54.3
session-timeout 66.6
accept-timeout 0.1
}

637
test/scripts/socket_test.sh Executable file

File diff suppressed because it is too large Load Diff