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:

committed by
Florin Coras

parent
7faab8d3a5
commit
543852a46c
10
extras/gdb/gdb_cmdfile.vcl_client
Normal file
10
extras/gdb/gdb_cmdfile.vcl_client
Normal 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
|
10
extras/gdb/gdb_cmdfile.vcl_server
Normal file
10
extras/gdb/gdb_cmdfile.vcl_server
Normal 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
|
7
extras/gdb/gdb_cmdfile.vpp
Normal file
7
extras/gdb/gdb_cmdfile.vpp
Normal 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
|
41
src/uri.am
41
src/uri.am
@ -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
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
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
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
27
src/uri/vcl_test_client.c
Normal 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
27
src/uri/vcl_test_server.c
Normal 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
2453
src/uri/vppcom.c
Normal file
File diff suppressed because it is too large
Load Diff
152
src/uri/vppcom.h
Normal file
152
src/uri/vppcom.h
Normal 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
25
src/uri/vppcom_test.conf
Normal 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
637
test/scripts/socket_test.sh
Executable file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user