Merge pull request #169 from lchristina26/master

updates for VxWorks

Update example client/server to be compatible with VxWorks builds
pull/171/head
Leah 2015-10-29 13:50:13 -06:00
commit 8dfa1af9e9
4 changed files with 120 additions and 28 deletions

View File

@ -1,23 +1,103 @@
## Wind River Workbench using VxWorks with wolfSSL ## Wind River Workbench using VxWorks with wolfSSL
###SETUP: ###1 SETUP:
####Steps (There are many ways to set this up, this is one example) ####1.1 Steps
1. Open WorkBench and go to File > Import > Existing Projects Into Workspace 1. Start by creating a new VxWorks image in Workbench by going to File > New >
2. Make sure the correct path to wolfSSL header files(wolfssl/wolfssl) is Project and then select VxWorks Image Project.
selected by right clicking the project and going to Properties > Build 2. Include the path to the wolfSSL header files(wolfssl/wolfssl):
Properties > Paths. If you need to change this to a different path, do so now. Right click the project and go to Properties > Build Properties > Paths.
3. Right click on the project and go to Import > Filesystem. Choose your path Choose Browse and select the wolfssl directory. Click ok.
to the wolfSSL library here. Uncheck everything except the src and wolfcrypt 3. Add preprocessor definitions:
directories. Only keep wolfcrypt/test/test.h, not test.c. Also uncheck test Right click on project, go to Properties > Build Properties > Variables.
and benchmark directories and aes\_asm.asm and aes\_asm.s files from wolfcrypt/src. Highlight EXTRA\_DEFINE. Click Edit and add the following to this line:
4. In wolfSSL/test.h, make sure certs are in the proper directory, or move. -DWOLFSSL\_VXWORKS.
5. The wolfcrypt source files, namely misc.c, may need to be moved directly under This can also be done in wolfssl/wolfcrypt/settings.h by uncommenting the
a wolfcrypt folder within the project. It will be \<name\_of\_project\>/wolfcrypt/src/misc.c. #define WOLFSSL_VXWORKS
Alnternatively, add wolfssl to the include path, #include line.
\<wolfssl/wolfcrypt/src/misc.c\>. If there is not a filesystem set up, add -DUSE\_CERT\_BUFFERS\_2048 and
6. Make sure TFM\_X86 is undefined. -DNO\_FILESYSTEM to the variables or #define USE\_CERT\_BUFFERS\_2048 and
\#define NO\_FILESYSTEM at the top of settings.h.
If there is a filesystem, paths may need to be changed to the path of
filesystem for certificate files in wolfssl/test.h.
4. Right click on the project and go to Import > Filesystem. Choose the path
to the wolfSSL library here. Uncheck everything except the src and wolfcrypt
directories.
In the wolfcrypt/src folder, uncheck aes\_asm.asm and aes\_asm.s.
5. If NO\_\_DEV\_RANDOM remains defined in wolfssl/wolfcrypt/settings.h under
\#ifdef WOLFSSL\_VXWORKS, a new GenerateSeed() function will need to be defined
in wolfcrypt/src/random.c.
####Necessary Files ####1.2 Testing wolfSSL with VxWorks:
You will need the following files to replicate this build: #####1.2.1 wolfCrypt Test Application
The wolfCrypt test application will test each of the cryptographic algorithms
and output the status for each. This should return success for each algorithm
if everything is working.
1. In usrAppInit.c, make a call to the wolfCrypt test application by adding
the following to the usrAppInit() function:
typedef struct func_args {
int argc;
char** argv;
int return_code;
} func_args;
func_args args;
wolfcrypt_test(&args);
2. Include these header files in usrAppInit.c:
#include <wolfcrypt/test/test.h>
#include <wolfssl/ssl.h>
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/test.h>
3. Start the simulator and check that all wolfCrypt tests pass. If there is a
certificate file error, adjust the caCert file locations in
wolfcrypt/test/test.c or wolfssl/test.h to those of the filesystem in use.
#####1.2.2 Example Client
The wolfSSL example client can be found in wolfssl/examples/client.
1. Add client.c and client.h from the examples/client folder to the Workbench
project.
2. In usrAppInit.c, inlucde the func\_args as described in the Test Application
section, and add a call to the client function:
client_test(&args);
3. Add the client.h header file to the includes at the top of usrAppInit.c.
4. The wolfSSLIP will need to be changed to the IP address the server is
running on. If using the VxWorks Simulator, localhost will not work. NAT should
be selected in the Simulator Connection Advanced setup.
5. Start the example server from within the wolfSSL directory on the host
machine:
./examples/server/server -d -b
The -d option disables peer checks, -b allows for binding to any interface.
6. Start the example client in Workbench.
#####1.2.3 Example Server
The example server requires more configuration than the client if using the
VxWorks simulator.
1. Add server.c and server.h from the wolfssl/examples/server folder to the
Workbench project.
2. In usrAppInit.c, inlcude the func\args as described in the Test and Client
applications and add a call to the server function:
func_args args = { 0 };
tcp_ready ready;
InitTcpReady(&ready);
args.signal = &ready;
server_test(&args);
3. Add the server.h header file to the includes at the top of usrAppInit.c.
4. Start the server by following the directions in Section 2 for setting up
the VxWorks Simulator.
5. Start the client on the host machine:
./examples/client/client -d
The -d option disables peer checks.
Note: If there are certificate file errors, the file paths in wolfssl/test.h
will need to be adjusted to follow the paths located on the filesystem used
by the VxWorks project.
####1.3 Necessary Files
The following files are required to replicate this build:
* vxsim\_linux\_1\_0\_2\_2 (directory) * vxsim\_linux\_1\_0\_2\_2 (directory)
* Includes * Includes
* compilers/gnu-4.8.1.5/include/c++/4.8 * compilers/gnu-4.8.1.5/include/c++/4.8
@ -29,7 +109,7 @@ You will need the following files to replicate this build:
* vsb\_vxsim\_linux/krnl/h/public * vsb\_vxsim\_linux/krnl/h/public
* vsb\_vxsim\_linux/krnl/configlette * vsb\_vxsim\_linux/krnl/configlette
* vsb\_vxsim\_linux/h * vsb\_vxsim\_linux/h
* usrAppInit.c (should be created when you create a new VxWorks image) * usrAppInit.c (should be created when with new VxWorks image)
* Include this at the top: * Include this at the top:
#include <wolfssl/wolfcrypt/settings.h> #include <wolfssl/wolfcrypt/settings.h>
#include <wolfcrypt/test/test.h> #include <wolfcrypt/test/test.h>
@ -47,20 +127,24 @@ You will need the following files to replicate this build:
wolfcrypt\_test(NULL); wolfcrypt\_test(NULL);
/* client\_test(NULL); */ /* client\_test(NULL); */
/*server\_test(&args);*/ /*server\_test(&args);*/
* usrRtpAppInit.c (should be created when you create a new VxWorks image) * usrRtpAppInit.c (should be created when with new VxWorks image)
Leave unchanged Leave unchanged
* This project was tested with a pre-built image in the VxWorks distribution * This project was tested with a pre-built image in the VxWorks distribution
called vsb\_vxsim\_linux. \<BEGIN\> $(VSB\_DIR) line in the .wpj file may need to be called vsb\_vxsim\_linux.
changed according to the VxWorks package being used.
###VXWORKS SIMULATOR: ###2 VXWORKS SIMULATOR:
In "Open Connection Details" under VxWorks Simulator which is in the connections ######The VxWorks simulator was used for testing the wolfSSL example applications (server, client, benchmark, and test).
dropdown. After the project has been build, choose the corresponding kernel image, typically called project/default/VxWorks. Select simnetd from the dropdown and enter 192.168.200.1 as the IP address. ######These are the steps to reproduce this testing method.
Go to "Open Connection Details" under VxWorks Simulator which is in the connections
dropdown. Choose the corresponding kernel image, typically called
project/default/VxWorks. Select simnetd from the dropdown and enter
192.168.200.1 as the IP address.
To connect to a server running on the VxWorks Simulator, enter these commands To connect to a server running on the VxWorks Simulator, enter these commands
into the host terminal (for Ubuntu 14.04): into the host terminal (for Ubuntu 14.04):
sudo openvpn --mktun --dev tap0 sudo openvpn --mktun --dev tap0
In Wind River directory: In Wind River directory:
vxworks-7/host/x86-linux2/bin/vxsimnetd sudo vxworks-7/host/x86-linux2/bin/vxsimnetd
This will start the vxsimnetd application. Leave it open. The IP address to This will start the vxsimnetd application. Leave it open. The IP address to
connect to the server is the same as above. connect to the server is the same as above.

View File

@ -464,6 +464,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
StackTrap(); StackTrap();
#ifndef WOLFSSL_VXWORKS
while ((ch = mygetopt(argc, argv, while ((ch = mygetopt(argc, argv,
"?gdeDusmNrwRitfxXUPCh:p:v:l:A:c:k:Z:b:zS:L:ToO:aB:")) "?gdeDusmNrwRitfxXUPCh:p:v:l:A:c:k:Z:b:zS:L:ToO:aB:"))
!= -1) { != -1) {
@ -697,6 +698,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
} }
myoptind = 0; /* reset for test cases */ myoptind = 0; /* reset for test cases */
#endif /* !WOLFSSL_VXWORKS */
if (externalTest) { if (externalTest) {
/* detect build cases that wouldn't allow test against wolfssl.com */ /* detect build cases that wouldn't allow test against wolfssl.com */

View File

@ -314,6 +314,7 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
fdOpenSession(Task_self()); fdOpenSession(Task_self());
#endif #endif
#ifndef WOLFSSL_VXWORKS
while ((ch = mygetopt(argc, argv, "?dbstnNufrRawPIp:v:l:A:c:k:Z:S:oO:D:L:ieB:")) while ((ch = mygetopt(argc, argv, "?dbstnNufrRawPIp:v:l:A:c:k:Z:S:oO:D:L:ieB:"))
!= -1) { != -1) {
switch (ch) { switch (ch) {
@ -494,6 +495,7 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
} }
myoptind = 0; /* reset for test cases */ myoptind = 0; /* reset for test cases */
#endif /* !WOLFSSL_VXWORKS */
/* sort out DTLS versus TLS versions */ /* sort out DTLS versus TLS versions */
if (version == CLIENT_INVALID_VERSION) { if (version == CLIENT_INVALID_VERSION) {

View File

@ -305,6 +305,10 @@
#ifdef WOLFSSL_VXWORKS #ifdef WOLFSSL_VXWORKS
#define WOLFSSL_HAVE_MIN
#define USE_FAST_MATH
#define TFM_TIMING_RESISTANT
#define NO_MAIN_DRIVER
#define NO_DEV_RANDOM #define NO_DEV_RANDOM
#define NO_WRITEV #define NO_WRITEV
#endif #endif