diff options
author | Florin Coras <fcoras@cisco.com> | 2020-11-19 13:38:26 -0800 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2021-02-09 21:33:19 +0000 |
commit | 4b47ee26cba610b26bbfc088736846541bee7be3 (patch) | |
tree | cb6aedb8a7ba69140bda4709dbff084d91ffff90 /src/vcl | |
parent | da2305fb874a7cf6573267adb87166564e328396 (diff) |
tls: dtls initial implementation
Type: feature
Basic dtls transport protocol implementation that relies on openssl
wire protocol implementation. Retries/timeouts not yet supported.
To test using vcl test apps, first ensure all arp entries are properly
resolved and subsequently:
server: vcl_server -p dtls 1234
client: vcl_client -p dtls <server-ip> 1234 -U -N 2000000 -T 1460 -X
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I04b4516a8fe9ce85ba230bcdd891f33a900046ed
Diffstat (limited to 'src/vcl')
-rw-r--r-- | src/vcl/vcl_private.h | 5 | ||||
-rw-r--r-- | src/vcl/vppcom.c | 7 | ||||
-rw-r--r-- | src/vcl/vppcom.h | 47 |
3 files changed, 34 insertions, 25 deletions
diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index 21853ebdc9a..59bb7621e70 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -542,7 +542,8 @@ static inline u8 vcl_session_has_crypto (vcl_session_t *s) { return (s->session_type == VPPCOM_PROTO_TLS || - s->session_type == VPPCOM_PROTO_QUIC); + s->session_type == VPPCOM_PROTO_QUIC || + s->session_type == VPPCOM_PROTO_DTLS); } static inline u8 @@ -608,7 +609,7 @@ vcl_ip_copy_to_ep (ip46_address_t * ip, vppcom_endpt_t * ep, u8 is_ip4) static inline int vcl_proto_is_dgram (uint8_t proto) { - return proto == VPPCOM_PROTO_UDP; + return proto == VPPCOM_PROTO_UDP || proto == VPPCOM_PROTO_DTLS; } static inline u8 diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 21892438c37..bc83b55d5d0 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -1526,6 +1526,10 @@ vppcom_unformat_proto (uint8_t * proto, char *proto_str) *proto = VPPCOM_PROTO_QUIC; else if (!strcmp (proto_str, "quic")) *proto = VPPCOM_PROTO_QUIC; + else if (!strcmp (proto_str, "DTLS")) + *proto = VPPCOM_PROTO_DTLS; + else if (!strcmp (proto_str, "dtls")) + *proto = VPPCOM_PROTO_DTLS; else return 1; return 0; @@ -3933,6 +3937,9 @@ vppcom_proto_str (vppcom_proto_t proto) case VPPCOM_PROTO_QUIC: proto_str = "QUIC"; break; + case VPPCOM_PROTO_DTLS: + proto_str = "DTLS"; + break; default: proto_str = "UNKNOWN"; break; diff --git a/src/vcl/vppcom.h b/src/vcl/vppcom.h index 6e3c2784db6..1d2fa5df1ba 100644 --- a/src/vcl/vppcom.h +++ b/src/vcl/vppcom.h @@ -45,29 +45,30 @@ extern "C" #define VPPCOM_ENV_VPP_API_SOCKET "VCL_VPP_API_SOCKET" #define VPPCOM_ENV_VPP_SAPI_SOCKET "VCL_VPP_SAPI_SOCKET" -typedef enum -{ - VPPCOM_PROTO_TCP = 0, - VPPCOM_PROTO_UDP, - VPPCOM_PROTO_NONE, - VPPCOM_PROTO_TLS, - VPPCOM_PROTO_QUIC, -} vppcom_proto_t; - -typedef enum -{ - VPPCOM_IS_IP6 = 0, - VPPCOM_IS_IP4, -} vppcom_is_ip4_t; - -typedef struct vppcom_endpt_t_ -{ - uint8_t is_cut_thru; - uint8_t is_ip4; - uint8_t *ip; - uint16_t port; - uint64_t parent_handle; -} vppcom_endpt_t; + typedef enum + { + VPPCOM_PROTO_TCP = 0, + VPPCOM_PROTO_UDP, + VPPCOM_PROTO_NONE, + VPPCOM_PROTO_TLS, + VPPCOM_PROTO_QUIC, + VPPCOM_PROTO_DTLS, + } vppcom_proto_t; + + typedef enum + { + VPPCOM_IS_IP6 = 0, + VPPCOM_IS_IP4, + } vppcom_is_ip4_t; + + typedef struct vppcom_endpt_t_ + { + uint8_t is_cut_thru; + uint8_t is_ip4; + uint8_t *ip; + uint16_t port; + uint64_t parent_handle; + } vppcom_endpt_t; typedef uint32_t vcl_session_handle_t; |