]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/net/lwip_tcpip/v2_0/tests/udpecho.c
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / net / lwip_tcpip / v2_0 / tests / udpecho.c
1 /*
2  * Copyright (c) 2001, Swedish Institute of Computer Science.
3  * All rights reserved. 
4  *
5  * Redistribution and use in source and binary forms, with or without 
6  * modification, are permitted provided that the following conditions 
7  * are met: 
8  * 1. Redistributions of source code must retain the above copyright 
9  *    notice, this list of conditions and the following disclaimer. 
10  * 2. Redistributions in binary form must reproduce the above copyright 
11  *    notice, this list of conditions and the following disclaimer in the 
12  *    documentation and/or other materials provided with the distribution. 
13  * 3. Neither the name of the Institute nor the names of its contributors 
14  *    may be used to endorse or promote products derived from this software 
15  *    without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
27  * SUCH DAMAGE. 
28  *
29  * This file is part of the lwIP TCP/IP stack.
30  * 
31  * Author: Adam Dunkels <adam@sics.se>
32  *
33  */
34
35 #include "lwip/api.h"
36 #include "lwip/sys.h"
37 #include <cyg/infra/testcase.h>
38
39 #ifdef CYGPKG_LWIP_UDP
40
41 /*-----------------------------------------------------------------------------------*/
42 char buffer[100];
43 void 
44 udpecho_thread(void *arg)
45 {
46   struct netconn *conn;
47   struct netbuf *buf;
48   struct ip_addr *addr;
49   unsigned short port;
50   
51   conn = netconn_new(NETCONN_UDP);
52   netconn_bind(conn, NULL, 7);
53
54   while(1) {
55     buf = netconn_recv(conn);
56     addr = netbuf_fromaddr(buf);
57     port = netbuf_fromport(buf);
58     netconn_connect(conn, addr, port);
59     netconn_send(conn, buf);
60     netbuf_copy(buf, buffer, sizeof(buffer));
61     netbuf_delete(buf);
62   }
63 }
64 /*-----------------------------------------------------------------------------------*/
65 void tmain(cyg_addrword_t p)
66 {
67   lwip_init();  
68   sys_thread_new(udpecho_thread, (void*)"udpecho",7);
69 }
70
71 #define STACK_SIZE 0x1000
72 static char stack[STACK_SIZE];
73 static cyg_thread thread_data;
74 static cyg_handle_t thread_handle;
75
76 void
77 udpecho_main(void)
78 {
79     CYG_TEST_INIT();
80     // Create a main thread, so we can run the scheduler and have time 'pass'
81     cyg_thread_create(10,                // Priority - just a number
82                       tmain,          // entry
83                       0,                 // entry parameter
84                       "UDP echo test",        // Name
85                       &stack[0],         // Stack
86                       STACK_SIZE,        // Size
87                       &thread_handle,    // Handle
88                       &thread_data       // Thread data structure
89             );
90     cyg_thread_resume(thread_handle);  // Start it
91     
92     cyg_scheduler_start();
93
94     CYG_TEST_FAIL_FINISH("Not reached");
95 }
96
97 externC void
98 cyg_start( void )
99 {
100     udpecho_main();
101 }
102
103 #else // def CYGPKG_LWIP_UDP
104 #define N_A_MSG "UDP support disabled"
105 #endif // def CYGFUN_KERNEL_API_C
106
107 #ifdef N_A_MSG
108 externC void
109 cyg_start( void )
110 {
111     CYG_TEST_INIT();
112     CYG_TEST_NA(N_A_MSG);
113 }
114 #endif // N_A_MSG
115
116