annotate packages/net/tcpip/current/tests/multi_lo_select.c @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents 02ea4320376c
children d60da272beeb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
1 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
2 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
3 // tests/multi_lo_test.c
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
4 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
5 // Multiple selects-at-one-time test, using lo for portability.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
6 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
7 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
9 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
10 // -------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
12 // Version 1.1 (the "License"); you may not use this file except in
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
14 // http://www.redhat.com/
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
15 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
19 // the License.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
20 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
22 // released September 30, 1998.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
23 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
25 // Portions created by Red Hat are
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
27 // All Rights Reserved.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
28 // -------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
29 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
31 //####BSDCOPYRIGHTBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
32 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
33 // -------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
34 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
35 // Portions of this software may have been derived from OpenBSD or other sources
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
36 // and are covered by the appropriate copyright disclaimers included herein.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
37 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
38 // -------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
39 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
40 //####BSDCOPYRIGHTEND####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
41 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
42 //#####DESCRIPTIONBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
43 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
44 // Author(s): sorin@netappi.com, hmt
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
45 // Contributors: gthomas,sorin@netappi.com
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
46 // Date: 2000-05-24
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
47 // Description:
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
48 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
49 // This test is to test that the internal producer operation to select
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
50 // truly has broadcast semantics; there was a bug in there whereby it
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
51 // doesn't, so events get lost and/or the wrong thread is awakened.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
52 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
53 // We need to create N threads selecting on different sockets
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
54 // (different ports) (including one or two selecting on several
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
55 // sockets) and have a further thread or threads which send data to
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
56 // the those sockets in an order "random" with respect to the order in
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
57 // which the N selectors entered the wait, and their thread
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
58 // priorities.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
59 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
60 // If this all works, then we know that select always wakes the right
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
61 // thread in the right order. I think...
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
62 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
63 // I think 10 threads 0-9 where #2,#3,#6,#7 wait for multiple threads
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
64 // will do it. #0-4 will be prio HI, #5-9 will be prio LO. Sender
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
65 // thread A at prio MID will send to sockets 1,3,5,7,9. Sender thread
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
66 // B at prio LOWEST will send to sockets 0,2,4,6,8.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
67 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
68 // Each sender thread will wait for a different semaphore signal
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
69 // before doing their next send, thus confirming correct ordering.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
70 // Two common semaphores will also be signalled, one when a send
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
71 // occurs, the other when a recv happens.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
72 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
73 // The master thread will start off VERYHIGHPRI, then drop after
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
74 // starting all the others, to VERYLOW... when it next runs, those
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
75 // common semaphores should both have value 10 == NLISTENERS.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
76 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
77 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
78 //#####DESCRIPTIONEND#####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
79 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
80 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
81
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
82 #include <network.h>
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
83
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
84 #include <cyg/infra/testcase.h>
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
85
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
86 #ifndef CYGPKG_LIBC_STDIO
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
87 #define perror(s) diag_printf(#s ": %s\n", strerror(errno))
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
88 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
89
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
90 #define SOURCE_PORT1 9900
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
91 #define SOURCE_PORT2 9800 // for those who listen to multiple ports
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
92 #define SOURCE_PORT3 9700 // for the dummy consumers of events
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
93
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
94 #define PRIO_DUMMY 4 // Really high, so they're always right back there
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
95
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
96 #define PRIO_LISTENER_HI 10
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
97 #define PRIO_LISTENER_LO 15
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
98
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
99 #define PRIO_SENDER_MID 12
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
100 #define PRIO_SENDER_LOW 17
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
101
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
102 #define PRIO_MASTERHIGH 3
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
103 #define PRIO_MASTERLOW 25
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
104
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
105 #ifndef CYGPKG_IO_FILEIO
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
106 #if CYGPKG_IO_NFILE > 30
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
107 #define NLISTENERS 10
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
108 #else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
109 // fewer threads if not many sockets available
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
110 #define NLISTENERS (CYGPKG_IO_NFILE/3)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
111 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
112 #else
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
113 #if CYGNUM_FILEIO_NFD > 30
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
114 #define NLISTENERS 10
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
115 #else
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
116 // fewer threads if not many sockets available
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
117 #define NLISTENERS (CYGNUM_FILEIO_NFD/3)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
118 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
119 #endif
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
120
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
121 #define NDUMMIES 10
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
122
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
123 #define NSENDERS 2
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
124
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
125 #define NUM_BUF NLISTENERS
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
126 #define MAX_BUF 100
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
127
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
128 // buffers for receiving into:
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
129 static unsigned char data_buf1[NUM_BUF][MAX_BUF];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
130
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
131 static unsigned char data_buf_write1[]="Client is alive";
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
132
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
133 #define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
134 #define MASTER_STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL + 0x1000)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
135
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
136 static char stack_master[MASTER_STACK_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
137 static cyg_thread master_thread_data;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
138 static cyg_handle_t master_thread_handle;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
139
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
140 static char stack_dummy[NDUMMIES][STACK_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
141 static cyg_thread dummy_thread_data[NDUMMIES];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
142 static cyg_handle_t dummy_thread_handle[NDUMMIES];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
143
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
144 static char stack_listener[NLISTENERS][STACK_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
145 static cyg_thread listener_thread_data[NLISTENERS];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
146 static cyg_handle_t listener_thread_handle[NLISTENERS];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
147
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
148 static char stack_sender[NSENDERS][STACK_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
149 static cyg_thread sender_thread_data[NSENDERS];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
150 static cyg_handle_t sender_thread_handle[NSENDERS];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
151
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
152 static cyg_sem_t listen_sema[NLISTENERS];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
153
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
154 static cyg_sem_t send_sema;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
155 static cyg_sem_t recv_sema;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
156
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
157 static cyg_thread_entry_t master;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
158 static cyg_thread_entry_t listener;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
159 static cyg_thread_entry_t sender;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
160
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
161 // ------------------------------------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
162
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
163 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
164 pexit(char *s)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
165 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
166 CYG_TEST_FAIL_FINISH( s );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
167 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
168
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
169
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
170 #ifndef max
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
171 #define max(a,b) (((a) > (b)) ? (a) : (b))
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
172 #endif
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
173
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
174 // ------------------------------------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
175
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
176 void dummy( cyg_addrword_t which )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
177 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
178 // Share the same socket... we appear to run out otherwise.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
179 static int s_s1 = -1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
180 static struct sockaddr_in local;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
181
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
182 // locals...
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
183 fd_set in_fds;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
184 int num;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
185
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
186 CYG_TEST_CHECK( 0 <= which, "which under" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
187 CYG_TEST_CHECK( NDUMMIES > which, "which over" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
188
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
189 diag_printf( "Dummy %d alive\n", which );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
190
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
191 if ( s_s1 < 0 ) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
192 s_s1 = socket(AF_INET, SOCK_STREAM, 0);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
193 if (s_s1 < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
194 pexit("stream socket 1");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
195 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
196 memset(&local, 0, sizeof(local));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
197 local.sin_family = AF_INET;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
198 local.sin_len = sizeof(local);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
199 local.sin_port = ntohs(SOURCE_PORT3 + which);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
200 local.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
201 if(bind(s_s1, (struct sockaddr *) &local, sizeof(local)) < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
202 pexit("dummy bind /source_1/ error");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
203 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
204 listen(s_s1, SOMAXCONN);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
205 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
206
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
207 while (true) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
208 FD_ZERO(&in_fds);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
209 FD_SET(s_s1, &in_fds);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
210 num = select( s_s1+1, &in_fds,0,0,0);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
211
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
212 if (FD_ISSET(s_s1,&in_fds)) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
213 CYG_TEST_FAIL( "Activity on dummy port!" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
214 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
215 } /* while (true) */
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
216 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
217
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
218 // ------------------------------------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
219
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
220 void listener( cyg_addrword_t which )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
221 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
222 int s_s1 = -1, e_s1 = 0, s_s2 = -1, e_s2 = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
223 struct sockaddr_in e_s1_addr,e_s2_addr,local;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
224 fd_set in_fds;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
225 int len;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
226 int num;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
227
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
228 // do we select on multiple sources?
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
229 int dual = (3 == (which & 3)) || (2 == (which & 3));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
230 // then which is 2,3,6,7 so set up a 2nd listener
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
231
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
232 CYG_TEST_CHECK( 0 <= which, "which under" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
233 CYG_TEST_CHECK( NLISTENERS > which, "which over" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
234
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
235 diag_printf( "Listener %d alive [%s]\n", which, dual ? "dual" : "single" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
236
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
237 s_s1 = socket(AF_INET, SOCK_STREAM, 0);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
238 if (s_s1 < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
239 pexit("stream socket 1");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
240 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
241 memset(&local, 0, sizeof(local));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
242 local.sin_family = AF_INET;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
243 local.sin_len = sizeof(local);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
244 local.sin_port = ntohs(SOURCE_PORT1 + which);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
245 local.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
246 if(bind(s_s1, (struct sockaddr *) &local, sizeof(local)) < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
247 pexit("bind /source_1/ error");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
248 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
249 listen(s_s1, SOMAXCONN);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
250
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
251 if ( dual ) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
252 s_s2 = socket(AF_INET, SOCK_STREAM, 0);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
253 if (s_s2 < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
254 pexit("stream socket 2");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
255 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
256 memset(&local, 0, sizeof(local));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
257 local.sin_family = AF_INET;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
258 local.sin_len = sizeof(local);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
259 local.sin_port = ntohs(SOURCE_PORT2 + which);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
260 local.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
261 if(bind(s_s2, (struct sockaddr *) &local, sizeof(local)) < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
262 pexit("bind /source_2/ error");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
263 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
264 listen(s_s2, SOMAXCONN);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
265 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
266
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
267 while (true) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
268 FD_ZERO(&in_fds);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
269 FD_SET(s_s1, &in_fds);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
270 if ( dual )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
271 FD_SET(s_s2, &in_fds);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
272 num = select ( max(s_s1,s_s2)+1, &in_fds,0,0,0);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
273
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
274 if (FD_ISSET(s_s1,&in_fds)) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
275 len = sizeof(e_s1_addr);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
276 if ((e_s1 = accept(s_s1,(struct sockaddr *)&e_s1_addr,&len))<0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
277 pexit("accept /source_1/");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
278 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
279 diag_printf("TCP SERVER connection from %s: %d\n",
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
280 inet_ntoa(e_s1_addr.sin_addr),ntohs(e_s1_addr.sin_port));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
281 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
282
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
283 if ( dual ) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
284 if (FD_ISSET(s_s2,&in_fds)) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
285 len = sizeof(e_s2_addr);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
286 if ((e_s2 = accept(s_s2,(struct sockaddr *)&e_s2_addr,&len))<0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
287 pexit("accept /source_2/");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
288 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
289 diag_printf("TCP SERVER connection from %s: %d\n",
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
290 inet_ntoa(e_s2_addr.sin_addr), ntohs(e_s2_addr.sin_port));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
291 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
292 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
293 if ((e_s1 != 0) || ( e_s2 != 0)) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
294 break;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
295 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
296 } /* while (true) */
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
297
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
298 CYG_TEST_CHECK( 0 != e_s1, "No connection made on s1!" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
299
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
300 if ((len = read(e_s1, data_buf1[which], MAX_BUF)) < 0 ) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
301 perror("I/O error s1");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
302 CYG_TEST_FAIL( "Read s1 failed" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
303 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
304 diag_printf("Listener %d: %s\n", which, data_buf1[which]);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
305
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
306 close( s_s1 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
307 if ( dual )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
308 close( s_s2 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
309 if ( 0 != e_s1 )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
310 close ( e_s1 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
311 if ( 0 != e_s2 )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
312 close ( e_s2 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
313
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
314 cyg_semaphore_post( &listen_sema[which] ); // Verify that I was here
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
315 cyg_semaphore_post( &recv_sema ); // Count receptions
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
316
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
317 cyg_thread_exit(); // explicitly
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
318 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
319
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
320 // ------------------------------------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
321 static void sender( cyg_addrword_t which ) // which means which set (odd/even) here...
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
322 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
323 int s_source;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
324 struct sockaddr_in local;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
325 int len;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
326
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
327 diag_printf("client %d [%s] :started\n", which, (which & 1) ? "odd" : "even" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
328
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
329 for ( /* which as is */; which < NLISTENERS; which += 2 ) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
330
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
331 s_source = socket(AF_INET, SOCK_STREAM, 0);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
332 if (s_source < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
333 pexit("stream socket");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
334 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
335 memset(&local, 0, sizeof(local));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
336 local.sin_family = AF_INET;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
337 local.sin_port = htons( SOURCE_PORT1 + which );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
338 local.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
339
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
340 if (connect(s_source, (struct sockaddr *)&local, sizeof(local)) < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
341 pexit("Can't connect to target");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
342 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
343
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
344 if ((len = write(s_source,data_buf_write1,sizeof(data_buf_write1) )) < 0) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
345 CYG_TEST_FAIL_FINISH("Error writing buffer");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
346 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
347 cyg_semaphore_wait( &listen_sema[which] ); // wait for the appropriate semaphore "reply"
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
348 cyg_semaphore_post( &send_sema ); // count up successful sends
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
349
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
350 close ( s_source );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
351 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
352 cyg_thread_exit(); // explicitly
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
353 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
354
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
355
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
356 static void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
357 master(cyg_addrword_t param)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
358 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
359 int i;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
360 cyg_handle_t self = cyg_thread_self();
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
361
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
362 cyg_semaphore_init( &send_sema, 0 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
363 cyg_semaphore_init( &recv_sema, 0 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
364
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
365 for ( i = 0 ; i < NLISTENERS; i++ )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
366 cyg_semaphore_init( &listen_sema[i], 0 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
367
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
368 init_all_network_interfaces();
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
369 CYG_TEST_INFO("Start multiple loopback select test");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
370 #if NLOOP > 0
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
371 // We are currently running at high prio, so we can just go and make
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
372 // loads of threads:
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
373
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
374 // Some at higher prio
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
375 for ( i = 0; i < NLISTENERS/2; i++ )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
376 cyg_thread_create(PRIO_LISTENER_HI, // Priority
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
377 listener, // entry
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
378 i, // entry parameter
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
379 "listener", // Name
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
380 &stack_listener[i][0], // Stack
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
381 STACK_SIZE, // Size
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
382 &listener_thread_handle[i], // Handle
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
383 &listener_thread_data[i] // Thread data structure
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
384 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
385 // the rest at lower prio
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
386 for ( ; i < NLISTENERS ; i++ )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
387 cyg_thread_create(PRIO_LISTENER_LO, // Priority
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
388 listener, // entry
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
389 i, // entry parameter
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
390 "listener", // Name
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
391 &stack_listener[i][0], // Stack
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
392 STACK_SIZE, // Size
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
393 &listener_thread_handle[i], // Handle
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
394 &listener_thread_data[i] // Thread data structure
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
395 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
396
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
397 // make the dummy event-grabber threads
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
398 for ( i = 0; i < NDUMMIES; i++ )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
399 cyg_thread_create(PRIO_DUMMY, // Priority
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
400 dummy, // entry
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
401 i, // entry parameter
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
402 "dummy", // Name
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
403 &stack_dummy[i][0], // Stack
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
404 STACK_SIZE, // Size
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
405 &dummy_thread_handle[i], // Handle
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
406 &dummy_thread_data[i] // Thread data structure
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
407 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
408
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
409 // Start those threads
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
410 for ( i = 0; i < NLISTENERS; i++ )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
411 cyg_thread_resume(listener_thread_handle[i]);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
412 for ( i = 0; i < NDUMMIES; i++ )
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
413 cyg_thread_resume( dummy_thread_handle[i]);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
414
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
415 // and let them start up and start listening...
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
416 cyg_thread_set_priority( self, PRIO_MASTERLOW );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
417 CYG_TEST_INFO("All listeners should be go now");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
418 cyg_thread_set_priority( self, PRIO_MASTERHIGH );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
419
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
420 for ( i = 0; i < NSENDERS; i++ ) {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
421 cyg_thread_create( (0 == i)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
422 ?PRIO_SENDER_MID
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
423 : PRIO_SENDER_LOW, // Priority
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
424 sender, // entry
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
425 i, // entry parameter
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
426 "sender", // Name
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
427 &stack_sender[i][0], // Stack
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
428 STACK_SIZE, // Size
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
429 &sender_thread_handle[i], // Handle
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
430 &sender_thread_data[i] // Thread data structure
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
431 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
432 cyg_thread_resume(sender_thread_handle[i]);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
433 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
434
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
435 // Now we are still higher priority; so go low and let everyone else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
436 // have their head. When we next run after this, it should all be
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
437 // over.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
438 cyg_thread_set_priority( self, PRIO_MASTERLOW );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
439
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
440 cyg_semaphore_peek( &recv_sema, &i );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
441 CYG_TEST_CHECK( NLISTENERS == i, "Not enough recvs occurred!" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
442
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
443 cyg_semaphore_peek( &send_sema, &i );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
444 CYG_TEST_CHECK( NLISTENERS == i, "Not enough sends occurred!" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
445
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
446 CYG_TEST_PASS_FINISH("Master returned OK");
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
447 #endif
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
448 CYG_TEST_NA( "No loopback devs" );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
449 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
450
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
451 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
452 cyg_user_start(void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
453 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
454 cyg_thread_create(PRIO_MASTERHIGH, // Priority
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
455 master, // entry
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
456 0, // entry parameter
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
457 "master", // Name
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
458 &stack_master[0], // Stack
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
459 MASTER_STACK_SIZE, // Size
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
460 &master_thread_handle, // Handle
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
461 &master_thread_data // Thread data structure
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
462 );
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
463 cyg_thread_resume(master_thread_handle); // Start it
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
464 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
465
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
466 // EOF multi_lo_select.c