]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/net/common/v2_0/tests/nc_test_framework.h
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / net / common / v2_0 / tests / nc_test_framework.h
1 //==========================================================================
2 //
3 //      tests/nc_test_framework.h
4 //
5 //      Network characterization tests framework
6 //
7 //==========================================================================
8 //####BSDCOPYRIGHTBEGIN####
9 //
10 // -------------------------------------------
11 //
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.
14 //
15 // -------------------------------------------
16 //
17 //####BSDCOPYRIGHTEND####
18 //==========================================================================
19 //#####DESCRIPTIONBEGIN####
20 //
21 // Author(s):    gthomas
22 // Contributors: gthomas
23 // Date:         2000-01-10
24 // Purpose:      
25 // Description:  
26 //              
27 //
28 //####DESCRIPTIONEND####
29 //
30 //==========================================================================
31
32 #ifndef _TESTS_NC_TEST_FRAMEWORK_H_
33 #define _TESTS_NC_TEST_FRAMEWORK_H_
34
35 #ifdef __ECOS
36 #include <network.h>
37 #else
38 #undef _KERNEL
39 #include <sys/param.h>
40 #include <sys/socket.h>
41 #include <sys/ioctl.h>
42 #include <sys/errno.h>
43 #include <sys/time.h>
44
45 #include <net/if.h>
46 #include <netinet/in_systm.h>
47 #include <netinet/in.h>
48 #include <netinet/ip.h>
49 #include <netinet/ip_icmp.h>
50 #include <string.h>
51
52 #include <netdb.h>
53 #ifndef EAI_NONE
54 #define EAI_NONE 0
55 #endif
56 #endif
57
58 #ifdef __ECOS
59 #define test_printf diag_printf
60 typedef cyg_addrword_t test_param_t;
61 #else
62 #include <stdio.h>
63 #define test_printf printf
64 typedef void *test_param_t;
65 #endif
66
67 #ifndef true
68 #define false 0
69 #define true  1
70 #endif
71
72 #define NC_SLAVE_PORT  7777
73 #define NC_MASTER_PORT 7776
74
75 #define NC_TESTING_SLAVE_PORT  8770
76 #define NC_TESTING_MASTER_PORT 8771
77
78 #define __string(s) #s
79 #define _string(s) __string(s)
80
81 //
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.
85 //
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.
89 //
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
95 // been sent.
96 //
97
98 #define MAX_ERRORS          5   // Give up after this many errors
99
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
103
104 struct nc_request {
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
110     int master_port;
111     int timeout;       // Max time to wait for any packet
112 };
113
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
124
125 struct nc_reply {
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
130         struct {
131             long      elapsed_time;  // In 10ms "ticks"
132             long      count[2];      // Result 
133         } idle_results;
134     } misc;
135 };
136
137 #define NC_REPLY_ACK  0x0001    // Request accepted
138 #define NC_REPLY_NAK  0x0000    // Request denied
139
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
143
144 //
145 // Test data 'packets' look like this
146
147 struct nc_test_data {
148     long  key1;
149     int   seq;
150     int   len;
151     long  key2;
152     char  data[0];  // Actual data
153 };
154
155 #define NC_TEST_DATA_KEY1 0xC0DEADC0
156 #define NC_TEST_DATA_KEY2 0xC0DEADC1
157
158 struct nc_test_results {
159     long key1;         // Identify uniquely as a response record
160     int  seq;          // Matches request
161     int  nsent;
162     int  nrecvd;
163     long key2;         // Additional verification
164 };
165
166 #define NC_TEST_RESULT_KEY1 0xDEADC0DE
167 #define NC_TEST_RESULT_KEY2 0xDEADC1DE
168
169 #endif // _TESTS_NC_TEST_FRAMEWORK_H_
170
171
172