1 //==========================================================================
3 // tests/nc_test_framework.h
5 // Network characterization tests framework
7 //==========================================================================
8 //####BSDCOPYRIGHTBEGIN####
10 // -------------------------------------------
12 // Portions of this software may have been derived from OpenBSD or other sources,
13 // and are covered by the appropriate copyright disclaimers included herein.
15 // -------------------------------------------
17 //####BSDCOPYRIGHTEND####
18 //==========================================================================
19 //#####DESCRIPTIONBEGIN####
22 // Contributors: gthomas
28 //####DESCRIPTIONEND####
30 //==========================================================================
32 #ifndef _TESTS_NC_TEST_FRAMEWORK_H_
33 #define _TESTS_NC_TEST_FRAMEWORK_H_
39 #include <sys/param.h>
40 #include <sys/socket.h>
41 #include <sys/ioctl.h>
42 #include <sys/errno.h>
46 #include <netinet/in_systm.h>
47 #include <netinet/in.h>
48 #include <netinet/ip.h>
49 #include <netinet/ip_icmp.h>
59 #define test_printf diag_printf
60 typedef cyg_addrword_t test_param_t;
63 #define test_printf printf
64 typedef void *test_param_t;
72 #define NC_SLAVE_PORT 7777
73 #define NC_MASTER_PORT 7776
75 #define NC_TESTING_SLAVE_PORT 8770
76 #define NC_TESTING_MASTER_PORT 8771
78 #define __string(s) #s
79 #define _string(s) __string(s)
82 // The basic idea behind this test structure is that one end will run
83 // in "slave" mode and the other in "master" mode. Typically, the slave
84 // will run on a target platform with the master running on a host.
86 // The slave starts up by listening for a connection on the "SLAVE_PORT".
87 // In order for the testing to require the minimum stack support, this
88 // connection (and the protocol) will use UDP.
90 // The master will connect to the slave and send it a request over this
91 // connection. Once the slave accepts the request, then master and slave
92 // will execute the operation, typically a test. The control connection
93 // will remain active until the master sends a 'disconnect' request. The
94 // control connection will be broken after the reply to this request has
98 #define MAX_ERRORS 5 // Give up after this many errors
100 #define NC_REPLY_TIMEOUT 10 // The slave may be slow
101 #define NC_TEST_TIMEOUT 3 // More generous for tests
102 #define NC_RESULTS_TIMEOUT (MAX_ERRORS+2)*NC_TEST_TIMEOUT
105 int type; // Description of request
106 int seq; // Sequence number, used to build response
107 int nbufs; // Number of "buffers" to send
108 int buflen; // Length of each buffer
109 int slave_port; // Network ports to use
111 int timeout; // Max time to wait for any packet
114 #define NC_REQUEST_DISCONNECT 0x0001
115 #define NC_REQUEST_UDP_SEND 0x0010 // Slave to send UDP data
116 #define NC_REQUEST_UDP_RECV 0x0011 // Slave to receive UDP data
117 #define NC_REQUEST_UDP_ECHO 0x0012 // Master->slave->master
118 #define NC_REQUEST_TCP_SEND 0x0020 // Slave to send TCP data
119 #define NC_REQUEST_TCP_RECV 0x0021 // Slave to receive TCP data
120 #define NC_REQUEST_TCP_ECHO 0x0022 // Master->slave->master
121 #define NC_REQUEST_START_IDLE 0x0100 // Start some idle processing
122 #define NC_REQUEST_STOP_IDLE 0x0101 // Stop idle processing
123 #define NC_REQUEST_SET_LOAD 0x0200 // Set the background load level
126 int response; // ACK or NAK
127 int seq; // Must match request
128 int reason; // If NAK, why request turned down
129 union { // Miscellaneous data, depending on request
131 long elapsed_time; // In 10ms "ticks"
132 long count[2]; // Result
137 #define NC_REPLY_ACK 0x0001 // Request accepted
138 #define NC_REPLY_NAK 0x0000 // Request denied
140 #define NC_REPLY_NAK_UNKNOWN_REQUEST 0x0001
141 #define NC_REPLY_NAK_BAD_REQUEST 0x0002 // Slave can't handle
142 #define NC_REPLY_NAK_NO_BACKGROUND 0x0003 // Slave can't do background/idle
145 // Test data 'packets' look like this
147 struct nc_test_data {
152 char data[0]; // Actual data
155 #define NC_TEST_DATA_KEY1 0xC0DEADC0
156 #define NC_TEST_DATA_KEY2 0xC0DEADC1
158 struct nc_test_results {
159 long key1; // Identify uniquely as a response record
160 int seq; // Matches request
163 long key2; // Additional verification
166 #define NC_TEST_RESULT_KEY1 0xDEADC0DE
167 #define NC_TEST_RESULT_KEY2 0xDEADC1DE
169 #endif // _TESTS_NC_TEST_FRAMEWORK_H_