Mercurial > flash_v2
comparison packages/net/ppp/current/tests/nc_test_framework.h @ 1586:e0d88dc6a92f
Added PPP network support.
| author | nickg |
|---|---|
| date | Wed, 14 Apr 2004 15:08:56 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1585:eead27d1aa2f | 1586:e0d88dc6a92f |
|---|---|
| 1 //========================================================================== | |
| 2 // | |
| 3 // tests/nc_test_framework.h | |
| 4 // | |
| 5 // Network characterization tests framework | |
| 6 // | |
| 7 //========================================================================== | |
| 8 //####ECOSGPLCOPYRIGHTBEGIN#### | |
| 9 // ------------------------------------------- | |
| 10 // This file is part of eCos, the Embedded Configurable Operating System. | |
| 11 // Portions created by Nick Garnett are | |
| 12 // Copyright (C) 2003 eCosCentric Ltd. | |
| 13 // | |
| 14 // eCos is free software; you can redistribute it and/or modify it under | |
| 15 // the terms of the GNU General Public License as published by the Free | |
| 16 // Software Foundation; either version 2 or (at your option) any later version. | |
| 17 // | |
| 18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY | |
| 19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 21 // for more details. | |
| 22 // | |
| 23 // You should have received a copy of the GNU General Public License along | |
| 24 // with eCos; if not, write to the Free Software Foundation, Inc., | |
| 25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | |
| 26 // | |
| 27 // As a special exception, if other files instantiate templates or use macros | |
| 28 // or inline functions from this file, or you compile this file and link it | |
| 29 // with other works to produce a work based on this file, this file does not | |
| 30 // by itself cause the resulting work to be covered by the GNU General Public | |
| 31 // License. However the source code for this file must still be made available | |
| 32 // in accordance with section (3) of the GNU General Public License. | |
| 33 // | |
| 34 // This exception does not invalidate any other reasons why a work based on | |
| 35 // this file might be covered by the GNU General Public License. | |
| 36 // | |
| 37 // ------------------------------------------- | |
| 38 //####ECOSGPLCOPYRIGHTEND#### | |
| 39 //####BSDCOPYRIGHTBEGIN#### | |
| 40 // | |
| 41 // ------------------------------------------- | |
| 42 // | |
| 43 // Portions of this software may have been derived from OpenBSD, | |
| 44 // FreeBSD or other sources, and are covered by the appropriate | |
| 45 // copyright disclaimers included herein. | |
| 46 // | |
| 47 // ------------------------------------------- | |
| 48 // | |
| 49 //####BSDCOPYRIGHTEND#### | |
| 50 //========================================================================== | |
| 51 //#####DESCRIPTIONBEGIN#### | |
| 52 // | |
| 53 // Author(s): gthomas | |
| 54 // Contributors: gthomas | |
| 55 // Date: 2000-01-10 | |
| 56 // Purpose: | |
| 57 // Description: | |
| 58 // | |
| 59 // | |
| 60 //####DESCRIPTIONEND#### | |
| 61 // | |
| 62 //========================================================================== | |
| 63 | |
| 64 #ifndef _TESTS_NC_TEST_FRAMEWORK_H_ | |
| 65 #define _TESTS_NC_TEST_FRAMEWORK_H_ | |
| 66 | |
| 67 #ifdef __ECOS | |
| 68 #include <network.h> | |
| 69 #else | |
| 70 #undef _KERNEL | |
| 71 #include <sys/param.h> | |
| 72 #include <sys/socket.h> | |
| 73 #include <sys/ioctl.h> | |
| 74 #include <sys/errno.h> | |
| 75 #include <sys/time.h> | |
| 76 | |
| 77 #include <net/if.h> | |
| 78 #include <netinet/in_systm.h> | |
| 79 #include <netinet/in.h> | |
| 80 #include <netinet/ip.h> | |
| 81 #include <netinet/ip_icmp.h> | |
| 82 | |
| 83 #include <netdb.h> | |
| 84 #ifndef EAI_NONE | |
| 85 #define EAI_NONE 0 | |
| 86 #endif | |
| 87 #endif | |
| 88 | |
| 89 #ifdef __ECOS | |
| 90 #define test_printf diag_printf | |
| 91 typedef cyg_addrword_t test_param_t; | |
| 92 #else | |
| 93 #define test_printf printf | |
| 94 typedef void *test_param_t; | |
| 95 #endif | |
| 96 | |
| 97 #ifndef true | |
| 98 #define false 0 | |
| 99 #define true 1 | |
| 100 #endif | |
| 101 | |
| 102 #define NC_SLAVE_PORT 7777 | |
| 103 #define NC_MASTER_PORT 7776 | |
| 104 | |
| 105 #define NC_TESTING_SLAVE_PORT 8770 | |
| 106 #define NC_TESTING_MASTER_PORT 8771 | |
| 107 | |
| 108 #define __string(s) #s | |
| 109 #define _string(s) __string(s) | |
| 110 | |
| 111 // | |
| 112 // The basic idea behind this test structure is that one end will run | |
| 113 // in "slave" mode and the other in "master" mode. Typically, the slave | |
| 114 // will run on a target platform with the master running on a host. | |
| 115 // | |
| 116 // The slave starts up by listening for a connection on the "SLAVE_PORT". | |
| 117 // In order for the testing to require the minimum stack support, this | |
| 118 // connection (and the protocol) will use UDP. | |
| 119 // | |
| 120 // The master will connect to the slave and send it a request over this | |
| 121 // connection. Once the slave accepts the request, then master and slave | |
| 122 // will execute the operation, typically a test. The control connection | |
| 123 // will remain active until the master sends a 'disconnect' request. The | |
| 124 // control connection will be broken after the reply to this request has | |
| 125 // been sent. | |
| 126 // | |
| 127 | |
| 128 #define MAX_ERRORS 5 // Give up after this many errors | |
| 129 | |
| 130 #define NC_REPLY_TIMEOUT 10 // The slave may be slow | |
| 131 #define NC_TEST_TIMEOUT 3 // More generous for tests | |
| 132 #define NC_RESULTS_TIMEOUT (MAX_ERRORS+2)*NC_TEST_TIMEOUT | |
| 133 | |
| 134 struct nc_request { | |
| 135 int type; // Description of request | |
| 136 int seq; // Sequence number, used to build response | |
| 137 int nbufs; // Number of "buffers" to send | |
| 138 int buflen; // Length of each buffer | |
| 139 int slave_port; // Network ports to use | |
| 140 int master_port; | |
| 141 int timeout; // Max time to wait for any packet | |
| 142 }; | |
| 143 | |
| 144 #define NC_REQUEST_DISCONNECT 0x0001 | |
| 145 #define NC_REQUEST_UDP_SEND 0x0010 // Slave to send UDP data | |
| 146 #define NC_REQUEST_UDP_RECV 0x0011 // Slave to receive UDP data | |
| 147 #define NC_REQUEST_UDP_ECHO 0x0012 // Master->slave->master | |
| 148 #define NC_REQUEST_TCP_SEND 0x0020 // Slave to send TCP data | |
| 149 #define NC_REQUEST_TCP_RECV 0x0021 // Slave to receive TCP data | |
| 150 #define NC_REQUEST_TCP_ECHO 0x0022 // Master->slave->master | |
| 151 #define NC_REQUEST_START_IDLE 0x0100 // Start some idle processing | |
| 152 #define NC_REQUEST_STOP_IDLE 0x0101 // Stop idle processing | |
| 153 #define NC_REQUEST_SET_LOAD 0x0200 // Set the background load level | |
| 154 | |
| 155 struct nc_reply { | |
| 156 int response; // ACK or NAK | |
| 157 int seq; // Must match request | |
| 158 int reason; // If NAK, why request turned down | |
| 159 union { // Miscellaneous data, depending on request | |
| 160 struct { | |
| 161 long elapsed_time; // In 10ms "ticks" | |
| 162 long count[2]; // Result | |
| 163 } idle_results; | |
| 164 } misc; | |
| 165 }; | |
| 166 | |
| 167 #define NC_REPLY_ACK 0x0001 // Request accepted | |
| 168 #define NC_REPLY_NAK 0x0000 // Request denied | |
| 169 | |
| 170 #define NC_REPLY_NAK_UNKNOWN_REQUEST 0x0001 | |
| 171 #define NC_REPLY_NAK_BAD_REQUEST 0x0002 // Slave can't handle | |
| 172 #define NC_REPLY_NAK_NO_BACKGROUND 0x0003 // Slave can't do background/idle | |
| 173 | |
| 174 // | |
| 175 // Test data 'packets' look like this | |
| 176 | |
| 177 struct nc_test_data { | |
| 178 long key1; | |
| 179 int seq; | |
| 180 int len; | |
| 181 long key2; | |
| 182 char data[0]; // Actual data | |
| 183 }; | |
| 184 | |
| 185 #define NC_TEST_DATA_KEY1 0xC0DEADC0 | |
| 186 #define NC_TEST_DATA_KEY2 0xC0DEADC1 | |
| 187 | |
| 188 struct nc_test_results { | |
| 189 long key1; // Identify uniquely as a response record | |
| 190 int seq; // Matches request | |
| 191 int nsent; | |
| 192 int nrecvd; | |
| 193 long key2; // Additional verification | |
| 194 }; | |
| 195 | |
| 196 #define NC_TEST_RESULT_KEY1 0xDEADC0DE | |
| 197 #define NC_TEST_RESULT_KEY2 0xDEADC1DE | |
| 198 | |
| 199 #endif // _TESTS_NC_TEST_FRAMEWORK_H_ | |
| 200 | |
| 201 | |
| 202 |
