
lwIP Robustness Test.
Dependencies: EthernetInterface mbed-rtos mbed
main.cpp
- Committer:
- tass
- Date:
- 2013-07-24
- Revision:
- 0:cdcf1e7c5b86
File content as of revision 0:cdcf1e7c5b86:
#include "mbed.h" #include "EthernetInterface.h" #define msgdbg(...) //#define msgdbg printf #define SENDING_RETRIES 5u #define READING_RETRIES 5u #define DHCP_RETRIES 10u #define BUFFER_SIZE 256 #define NUMBER_OF_HOSTS 3u #define MBED_HOST "www.mbed.org" #define MBED_HOST_REQUEST "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n" #define MEDIAFAX_HOST "www.mediafax.ro" #define MEDIAFAX_HOST_REQUEST "GET / HTTP/1.1\nHost: www.mediafax.ro\n\n" #define NXP_HOST "www.nxp.com" #define NXP_HOST_REQUEST "GET /documents/user_manual/UM10360.pdf HTTP/1.0\nHost: www.nxp.com\n\n" int totalTime = 0; extern uint32_t os_time; struct WebStats { char request[70]; char host[20]; int avgDuration; int maxReceived; int minReceived; int snapshots; }; struct WebStats webStatistics[NUMBER_OF_HOSTS]= { {MBED_HOST_REQUEST,MBED_HOST,0,0,0x7FFFFFFF,0}, {MEDIAFAX_HOST_REQUEST,MEDIAFAX_HOST,0,0,0x7FFFFFFF,0}, {NXP_HOST_REQUEST,NXP_HOST,0,0,0x7FFFFFFF,0} }; void printStatistics(void) { printf("\nTotal Time : %f seconds\n",(float)totalTime/1000.0f); for(int i=0;i<NUMBER_OF_HOSTS;i++) { printf("Host number : %d | %s\n",i, webStatistics[i].host); printf("MaxRecv : %d\n",webStatistics[i].maxReceived); printf("MinRecv : %d\n",webStatistics[i].minReceived); printf("Avg duration : %d ms\n",webStatistics[i].avgDuration); printf("Total snapshots : %d\n\n",webStatistics[i].snapshots); } } int main() { int retries = 0; EthernetInterface eth; TCPSocketConnection client; printf("Initialising...\n"); // use DHCP eth.init(); // attempt DHCP and if timing out then try again while (eth.connect()) { retries++; printf("[%d] DHCP timeout %d\n",os_time,retries); if(retries >= DHCP_RETRIES) { printf("DHCP failed. Bailing out..\n"); goto failure; } }; printf("[%d] Starting the robustness test...\n",os_time); while(1) { for(int i=0;i<NUMBER_OF_HOSTS;i++,client.close()) { int retries = 0; int received = 0; int time = 0; char tmpBuffer[BUFFER_SIZE]; int ret; printf("Mbed --> %s\n",webStatistics[i].host); time = os_time; // connecting if (client.connect(webStatistics[i].host, 80)) { printf("Failed to connect to : %s\n",webStatistics[i].host); continue; } retries = 0; // sending request while(1) { if( (ret = client.send_all(webStatistics[i].request,strlen(webStatistics[i].request))) <= 0) { printf("Retry sending no %d, return :%d\n",retries,ret); retries++; } else break; if(retries == SENDING_RETRIES+1) { printf("Failed sending. Bailing out this connection\n"); continue; } } retries = 0; // start reading while(true) { if( (ret = client.receive(tmpBuffer,sizeof(tmpBuffer))) <= 0) retries++; else received += ret; if(retries == READING_RETRIES) break; } //Snapshot! time = os_time - time; if(webStatistics[i].maxReceived < received) { webStatistics[i].maxReceived = received; } if(webStatistics[i].minReceived > received) { webStatistics[i].minReceived = received; } printf("Received : %d bytes\n",received); webStatistics[i].avgDuration = ((webStatistics[i].avgDuration *(webStatistics[i].snapshots++) ) + time)/webStatistics[i].snapshots; totalTime += time; } printStatistics(); Thread::wait(500); } failure: printf("Fatal error. Main thread is inactive\n"); while(1); }