CubePack: Better USER_IO support & cleanup warnings

pull/507/head
Lealem Amedie 2023-03-31 15:08:24 -06:00
parent 360abcfa09
commit 682e74fb40
6 changed files with 153 additions and 28 deletions

View File

@ -10,7 +10,7 @@ The wolfSSH Cube Pack can be found [here](https://www.wolfssl.com/files/ide/I-CU
4. In the `Software Packs` configuration category of the `.ioc` file, click on the wolfSSH pack and enable the library by checking the box. 4. In the `Software Packs` configuration category of the `.ioc` file, click on the wolfSSH pack and enable the library by checking the box.
5. Since LwIP is a dependency for the Cube Pack, enable LwIP in the `Middleware` configuration category of the project. Also enable the `LWIP_DNS` option in the LwIP configuration settings. 5. The Pack defaults to using custom IO provided by the user. Modify `ide/STM32CUBE/userio_template.h` to supply the custom IO. If you'd like to use LwIP instead, configure the wolfSSH IO settings in the `.ioc` to enable LwIP compatibilty. You'll also have to enable LwIP in the `Middleware` configuration category of the project. Enable the `LWIP_DNS` option in the LwIP configuration settings.
6. Save your changes and select yes to the prompt asking about generating code. 6. Save your changes and select yes to the prompt asking about generating code.
@ -19,4 +19,4 @@ The wolfSSH Cube Pack can be found [here](https://www.wolfssl.com/files/ide/I-CU
## Notes ## Notes
- Make sure to make [these changes](https://github.com/wolfSSL/wolfssl/tree/master/IDE/STM32Cube#stm32-printf) to redirect the printf's to the UART. - Make sure to make [these changes](https://github.com/wolfSSL/wolfssl/tree/master/IDE/STM32Cube#stm32-printf) to redirect the printf's to the UART.
- If looking to enable filesystem support, the pack assumes the user has defined their own filesystem in `wolfssh/myFilesystem.h`. That file will originally contain a dummy filesystem. If going the FATFS route, make sure to replace `#define WOLFSSH_USER_FILESYSTEM` with `#define WOLFSSH_FATFS` in the `wolfSSL.I-CUBE-wolfSSH_conf.h` header file. The wolfSSL Cube Pack also defaults to disabling filesystem support so make sure to remove `#define NO_FILESYSTEM` from `wolfSSL.I-CUBE-wolfSSL_conf.h`. - If looking to enable filesystem support (required for SFTP), the pack assumes the user has defined their own filesystem in `wolfssh/myFilesystem.h`. That file will originally contain a dummy filesystem. If going the FATFS route, make sure to replace `#define WOLFSSH_USER_FILESYSTEM` with `#define WOLFSSH_FATFS` in the `wolfSSL.I-CUBE-wolfSSH_conf.h` header file. The wolfSSL Cube Pack also defaults to disabling filesystem support so make sure to remove `#define NO_FILESYSTEM` from `wolfSSL.I-CUBE-wolfSSL_conf.h`.

View File

@ -94,9 +94,11 @@ extern ${variable.value} ${variable.name};
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* wolfSSH IO */ /* wolfSSH IO */
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
#define WOLFSSH_LWIP #if defined(WOLFSSH_CONF_IO) && WOLFSSH_CONF_IO == 2
/* Remove the LWIP define and uncomment the line below to use user defined IO */ #define WOLFSSH_LWIP
/* #define WOLFSSL_USER_IO */ #else
#define WOLFSSH_USER_IO
#endif
/* To be defined for the target Socket API */ /* To be defined for the target Socket API */
#define WSTARTTCP() #define WSTARTTCP()
@ -140,6 +142,8 @@ extern ${variable.value} ${variable.name};
#define CURVE25519_SMALL #define CURVE25519_SMALL
#define HAVE_ED25519 #define HAVE_ED25519
#define WOLFSSH_IGNORE_FILE_WARN
typedef unsigned int size_t; typedef unsigned int size_t;
/* defines for unit tests */ /* defines for unit tests */

View File

@ -40,107 +40,107 @@ typedef struct { int i; } stat_t;
#define WFD int #define WFD int
enum { O_RDWR, O_RDONLY, O_WRONLY, O_APPEND, O_CREAT, O_TRUNC, O_EXCL } ; enum { O_RDWR, O_RDONLY, O_WRONLY, O_APPEND, O_CREAT, O_TRUNC, O_EXCL } ;
static int WFOPEN(FILE **f, const char *n, const char *m){ static inline int WFOPEN(FILE **f, const char *n, const char *m){
(void) n; (void) m; (void)f; (void) n; (void) m; (void)f;
return NULL; return NULL;
} }
static int WFCLOSE(FILE *f) { static inline int WFCLOSE(FILE *f) {
(void) f; (void) f;
return 0; return 0;
} }
static size_t WFREAD(void *b, size_t s, size_t n, FILE *f) { static inline size_t WFREAD(void *b, size_t s, size_t n, FILE *f) {
(void) b; (void) s; (void) n; (void) f; (void) b; (void) s; (void) n; (void) f;
return 0; return 0;
} }
static size_t WFWRITE(const void *b, size_t s, size_t n, FILE *f) { static inline size_t WFWRITE(const void *b, size_t s, size_t n, FILE *f) {
(void) b; (void) s; (void) n; (void) f; (void) b; (void) s; (void) n; (void) f;
return 0; return 0;
} }
static int WFSEEK(FILE *f, long int p, int m) { static inline int WFSEEK(FILE *f, long int p, int m) {
(void) f; (void) p; (void) m; (void) f; (void) p; (void) m;
return 0; return 0;
} }
static long int WFTELL(FILE *f) { static inline long int WFTELL(FILE *f) {
(void) f; (void) f;
return 0; return 0;
} }
static void WREWIND(FILE *f) { static inline void WREWIND(FILE *f) {
(void) f; (void) f;
} }
static int WOPEN (const char* n, int f, int m) { static inline int WOPEN (const char* n, int f, int m) {
(void) f; (void) n; (void) m; (void) f; (void) n; (void) m;
return 0; return 0;
} }
static int WCLOSE(int f) { static inline int WCLOSE(int f) {
(void) f; (void) f;
return 0; return 0;
} }
static size_t WPREAD(int f, void* b, size_t c, off_t *o) { static inline size_t WPREAD(int f, void* b, size_t c, off_t *o) {
(void) f; (void) b; (void) c; (void)o; (void) f; (void) b; (void) c; (void)o;
return 0; return 0;
} }
static size_t WPWRITE(int f, void* b, size_t c, off_t *o) { static inline size_t WPWRITE(int f, void* b, size_t c, off_t *o) {
(void) f; (void) b; (void) c; (void)o; (void) f; (void) b; (void) c; (void)o;
return 0; return 0;
} }
static char *WGETCWD(void *fs, char *f, size_t l){ static inline char *WGETCWD(void *fs, char *f, size_t l){
(void) fs; (void) f; (void) l; (void) fs; (void) f; (void) l;
return 0; return 0;
} }
static int WRMDIR(void *fs, const char *p){ static inline int WRMDIR(void *fs, const char *p){
(void) p; (void) p;
return 0; return 0;
} }
static int WMKDIR(void *fs, const char *p, mode_t m) { static inline int WMKDIR(void *fs, const char *p, mode_t m) {
(void) p; (void) m; (void) p; (void) m;
return 0; return 0;
} }
static int WREMOVE(void *fs, const char *p){ static inline int WREMOVE(void *fs, const char *p){
(void) fs; (void) p; (void) fs; (void) p;
return 0; return 0;
} }
static int WRENAME(void *fs, const char *p, const char *np){ static inline int WRENAME(void *fs, const char *p, const char *np){
(void) fs; (void) p; (void)np; (void) fs; (void) p; (void)np;
return 0; return 0;
} }
static int WSTAT(const char *p, stat_t *b) { static inline int WSTAT(const char *p, stat_t *b) {
(void) p; (void)b; (void) p; (void)b;
return 0; return 0;
} }
static int WLSTAT(const char *p, stat_t *b) { static inline int WLSTAT(const char *p, stat_t *b) {
(void) p; (void)b; (void) p; (void)b;
return 0; return 0;
} }
static int WCHMOD(void *fs, const char *p, mode_t m) { static inline int WCHMOD(void *fs, const char *p, mode_t m) {
(void) fs; (void) p; (void)m; (void) fs; (void) p; (void)m;
return 0; return 0;
} }
static int SFTP_GetAttributes(void* fs, const char* fileName, static inline int SFTP_GetAttributes(void* fs, const char* fileName,
void* atr, byte link, void* heap) { void* atr, byte link, void* heap) {
(void)fs; (void)fileName; (void)atr; (void)link; (void)heap; (void)fs; (void)fileName; (void)atr; (void)link; (void)heap;
return 0; return 0;
} }
static int SFTP_GetAttributes_Handle(void* ssh, byte* handle, int handleSz, static inline int SFTP_GetAttributes_Handle(void* ssh, byte* handle, int handleSz,
void* atr) { void* atr) {
(void)ssh; (void)handle; (void)handleSz; (void)ssh; (void)handle; (void)handleSz;

View File

@ -0,0 +1,110 @@
/* userio_template.h
*
* Copyright (C) 2014-2023 wolfSSL Inc.
*
* This file is part of wolfSSH.
*
* wolfSSH is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* wolfSSH is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with wolfSSH. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef USERIO_TEMPLATE_H
#define USERIO_TEMPLATE_H
#ifdef WOLFSSH_USER_IO
#define SOCK_STREAM 1
#define SOCK_DGRAM 2
#define SOCK_RAW 3
#define SOL_SOCKET 0xfff
#define SO_REUSEADDR 0x0004
#define AF_INET 2
#define INADDR_ANY ((uint32_t)0x00000000UL)
#define socklen_t uint32_t
typedef struct { int s_addr; } in_addr;
struct sockaddr { int i; };
typedef struct sockaddr sockaddr;
struct sockaddr_in{
int sin_len;
int sin_family;
int sin_port;
in_addr sin_addr;
};
typedef struct sockaddr_in sockaddr_in;
struct hostent{
char *h_name;
int h_length;
char **h_addr_list;
};
typedef struct hostent hostent;
static inline int inet_addr(const char* n){
(void) n;
return 0;
}
static inline int htons(unsigned int n){
(void) n;
return 0;
}
static inline int ntohs(unsigned int n){
(void) n;
return 0;
}
static inline int socket(int d, int t, int p) {
(void) d; (void) t; (void) p;
return 0;
}
static inline int setsockopt(int s, int l, int n, const void *o,
socklen_t len) {
(void) s; (void) l; (void) n; (void) o; (void) len;
return 0;
}
static inline int getsockname(int s, struct sockaddr *n, socklen_t* len) {
(void) s; (void) n; (void) len;
return 0;
}
static inline int bind(int s, const struct sockaddr *n, socklen_t l) {
(void) s; (void) n; (void) l;
return 0;
}
static inline int listen(int s, int b) {
(void) s; (void) b;
return 0;
}
static inline struct hostent* gethostbyname(const char* n) {
(void) n;
return NULL;
}
#endif /* WOLFSSH_USER_IO */
#endif

View File

@ -51,7 +51,8 @@
/* Check for if compiling misc.c when not needed. */ /* Check for if compiling misc.c when not needed. */
#if !defined(WOLFSSH_MISC_INCLUDED) && !defined(NO_INLINE) #if !defined(WOLFSSH_MISC_INCLUDED) && !defined(NO_INLINE) && \
!defined(WOLFSSH_IGNORE_FILE_WARN)
#define MISC_WARNING "misc.c does not need to be compiled when using inline (NO_INLINE not defined))" #define MISC_WARNING "misc.c does not need to be compiled when using inline (NO_INLINE not defined))"
#ifndef _MSC_VER #ifndef _MSC_VER
@ -60,7 +61,7 @@
#pragma message("warning: " MISC_WARNING) #pragma message("warning: " MISC_WARNING)
#endif #endif
#else /* !WOLFSSL_MISC_INCLUDED && !NO_INLINE */ #else /* !WOLFSSL_MISC_INCLUDED && !NO_INLINE && !WOLFSSH_IGNORE_FILE_WARN */
#ifndef min #ifndef min

View File

@ -126,6 +126,16 @@
#endif #endif
#define SOCKET_T int #define SOCKET_T int
#define NUM_SOCKETS 5 #define NUM_SOCKETS 5
#elif defined(WOLFSSH_USER_IO)
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include "userio_template.h"
#ifndef SO_NOSIGPIPE
#include <signal.h> /* ignore SIGPIPE */
#endif
#define SOCKET_T int
#define NUM_SOCKETS 5
#else /* USE_WINDOWS_API */ #else /* USE_WINDOWS_API */
#include <unistd.h> #include <unistd.h>
#include <sys/socket.h> #include <sys/socket.h>