From 0c95a5e940ddf88aa37145689e7b5e14441aa45b Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Fri, 25 Sep 2015 10:51:35 +0900 Subject: [PATCH 1/3] Adding FreeRTOS TCP support, FREERTOS_TCP option --- src/io.c | 13 +++++++++++++ wolfcrypt/src/wc_port.c | 2 +- wolfssl/internal.h | 2 +- wolfssl/wolfcrypt/settings.h | 26 +++++++++++++++++++++++++- wolfssl/wolfcrypt/types.h | 4 ++-- wolfssl/wolfcrypt/wc_port.h | 8 ++++++-- 6 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/io.c b/src/io.c index e296a2ed9..42b2fb090 100644 --- a/src/io.c +++ b/src/io.c @@ -77,6 +77,8 @@ static int errno; #elif defined(WOLFSSL_TIRTOS) #include + #elif defined(FREERTOS_TCP) + #include "FreeRTOS_Sockets.h" #elif defined(WOLFSSL_IAR_ARM) /* nothing */ #else @@ -178,6 +180,14 @@ #define SOCKET_EPIPE PICO_ERR_EIO #define SOCKET_ECONNREFUSED PICO_ERR_ECONNREFUSED #define SOCKET_ECONNABORTED PICO_ERR_ESHUTDOWN +#elif defined(FREERTOS_TCP) + #define SOCKET_EWOULDBLOCK FREERTOS_EWOULDBLOCK + #define SOCKET_EAGAIN FREERTOS_EWOULDBLOCK + #define SOCKET_ECONNRESET FREERTOS_SOCKET_ERROR + #define SOCKET_EINTR FREERTOS_SOCKET_ERROR + #define SOCKET_EPIPE FREERTOS_SOCKET_ERROR + #define SOCKET_ECONNREFUSED FREERTOS_SOCKET_ERROR + #define SOCKET_ECONNABORTED FREERTOS_SOCKET_ERROR #else #define SOCKET_EWOULDBLOCK EWOULDBLOCK #define SOCKET_EAGAIN EAGAIN @@ -201,6 +211,9 @@ #elif defined(WOLFSSL_PICOTCP) #define SEND_FUNCTION pico_send #define RECV_FUNCTION pico_recv +#elif defined(FREERTOS_TCP) + #define RECV_FUNCTION(a,b,c,d) FreeRTOS_recv((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d)) + #define SEND_FUNCTION(a,b,c,d) FreeRTOS_send((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d)) #else #define SEND_FUNCTION send #define RECV_FUNCTION recv diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 775195c55..94967ceb1 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -66,7 +66,7 @@ int UnLockMutex(wolfSSL_Mutex *m) #else /* MULTI_THREAD */ - #if defined(FREERTOS) + #if defined(FREERTOS) || defined(FREERTOS_TCP) int InitMutex(wolfSSL_Mutex* m) { diff --git a/wolfssl/internal.h b/wolfssl/internal.h index bb7437e68..7dec30244 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -111,7 +111,7 @@ #endif #elif defined(MICRIUM) /* do nothing, just don't pick Unix */ -#elif defined(FREERTOS) || defined(WOLFSSL_SAFERTOS) +#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS) /* do nothing */ #elif defined(EBSNET) /* do nothing */ diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 1421b73fc..5800918ad 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -57,6 +57,9 @@ /* Uncomment next line if using FreeRTOS */ /* #define FREERTOS */ +/* Uncomment next line if using FreeRTOS-Plus TCP */ +/* #define FREERTOS_TCP */ + /* Uncomment next line if using FreeRTOS Windows Simulator */ /* #define FREERTOS_WINSIM */ @@ -305,7 +308,7 @@ /* Micrium will use Visual Studio for compilation but not the Win32 API */ -#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) \ +#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\ && !defined(EBSNET) && !defined(WOLFSSL_EROAD) #define USE_WINDOWS_API #endif @@ -406,6 +409,27 @@ static char *fgets(char *buff, int sz, FILE *fp) #endif #endif +#ifdef FREERTOS_TCP + +#if !defined(NO_WOLFSSL_MEMORY) && !defined(XMALLOC_USER) +#define XMALLOC(s, h, type) pvPortMalloc((s)) +#define XFREE(p, h, type) vPortFree((p)) +#endif + +#define CUSTOM_RAND_GENERATE testRandGen /* for test use only */ +static int testRandGen(void) { + return 0; +} + +#define NO_WOLFSSL_DIR +#define NO_WRITEV +#define WOLFSSL_HAVE_MIN +#define USE_FAST_MATH +#define TFM_TIMING_REGISTANT +#define NO_MAIN_DRIVER + +#endif + #ifdef WOLFSSL_TIRTOS #define SIZEOF_LONG_LONG 8 #define NO_WRITEV diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index dfe15d488..6c02013d9 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -155,7 +155,7 @@ /* Micrium will use Visual Studio for compilation but not the Win32 API */ - #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) \ + #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && !defined(FREERTOS_TCP) \ && !defined(EBSNET) #define USE_WINDOWS_API #endif @@ -180,7 +180,7 @@ #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \ && !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \ && !defined(FREESCALE_KSDK_MQX) && !defined(FREESCALE_FREE_RTOS) \ - && !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS) \ + && !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\ && !defined(WOLFSSL_uITRON4) && !defined(WOLFSSL_uTKERNEL2) /* default C runtime, can install different routines at runtime via cbs */ #include diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 2056b7cde..4989d19f1 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -49,7 +49,7 @@ #endif #elif defined(MICRIUM) /* do nothing, just don't pick Unix */ -#elif defined(FREERTOS) || defined(WOLFSSL_SAFERTOS) +#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS) /* do nothing */ #elif defined(EBSNET) /* do nothing */ @@ -87,8 +87,12 @@ typedef int wolfSSL_Mutex; #else /* MULTI_THREADED */ /* FREERTOS comes first to enable use of FreeRTOS Windows simulator only */ - #ifdef FREERTOS + #if defined(FREERTOS) typedef xSemaphoreHandle wolfSSL_Mutex; + #elif defined(FREERTOS_TCP) + #include "FreeRTOS.h" + #include "semphr.h" + typedef SemaphoreHandle_t wolfSSL_Mutex; #elif defined(WOLFSSL_SAFERTOS) typedef struct wolfSSL_Mutex { signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES]; From f450ac068414a30258158bbd6863449626f6ecfb Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Sat, 26 Sep 2015 08:03:49 +0900 Subject: [PATCH 2/3] settings.h: GenSeed for test only option --- wolfcrypt/src/random.c | 2 +- wolfssl/wolfcrypt/settings.h | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 53aa093c7..61e5faab9 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -102,7 +102,7 @@ int wc_RNG_GenerateByte(WC_RNG* rng, byte* b) #include #else #if !defined(NO_DEV_RANDOM) && !defined(CUSTOM_RAND_GENERATE) && \ - !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) + !defined(WOLFSSL_GENSEED_FORTEST) && !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) #include #ifndef EBSNET #include diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 5800918ad..726bb117c 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -57,7 +57,7 @@ /* Uncomment next line if using FreeRTOS */ /* #define FREERTOS */ -/* Uncomment next line if using FreeRTOS-Plus TCP */ +/* Uncomment next line if using FreeRTOS+ TCP */ /* #define FREERTOS_TCP */ /* Uncomment next line if using FreeRTOS Windows Simulator */ @@ -416,10 +416,7 @@ static char *fgets(char *buff, int sz, FILE *fp) #define XFREE(p, h, type) vPortFree((p)) #endif -#define CUSTOM_RAND_GENERATE testRandGen /* for test use only */ -static int testRandGen(void) { - return 0; -} +#define WOLFSSL_GENSEED_FORTEST #define NO_WOLFSSL_DIR #define NO_WRITEV From 0a530c1b70d609a4a7834b1946837b4058353e9c Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Sat, 26 Sep 2015 08:49:03 +0900 Subject: [PATCH 3/3] #pragma worning for Visual Studio --- wolfcrypt/src/random.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 61e5faab9..7ba6069b6 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -1185,7 +1185,11 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) || defined(WOLFSSL_uITRON4) || defined(WOLFSSL_uTKERNEL2)\ || defined(WOLFSSL_GENSEED_FORTEST) +#ifndef _MSC_VER #warning "write a real random seed!!!!, just for testing now" +#else +#pragma message("Warning: write a real random seed!!!!, just for testing now") +#endif int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) {