summaryrefslogtreecommitdiff
path: root/test/regression/tahi_test/netx_tahi_test_1.c
blob: 883fe1dc2b8e53cb56ff4f62236e51554529d8fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
/***************************************************************************/
/* Copyright (c) 2024 Microsoft Corporation                                */
/* Copyright (c) 2026 Eclipse ThreadX contributors                         */
/*                                                                         */
/* This program and the accompanying materials are made available under    */
/* the terms of the MIT License which is available at                      */
/* https://opensource.org/licenses/MIT.                                    */
/*                                                                         */
/* SPDX-License-Identifier: MIT                                            */
/***************************************************************************/

#include    "tx_api.h"
#include    "nx_api.h"
#include    "netx_tahi.h"
#if defined(FEATURE_NX_IPV6) && defined(NX_TAHI_ENABLE)
#include    "nx_tcp.h"
#include    "nx_ip.h"
#include    "nx_ipv6.h"
#include    "nx_icmpv6.h"



#define     DEMO_STACK_SIZE    2048
#define     TEST_INTERFACE     0

/* Define the ThreadX and NetX object control blocks...  */

static TX_THREAD               thread_0;


static NX_PACKET_POOL          pool_0;
static NX_IP                   ip_0;

/* Define the counters used in the demo application...  */

static ULONG                   error_counter;

static NXD_ADDRESS             ipv6_address_1;


/* Define thread prototypes.  */
static void         thread_0_entry(ULONG thread_input);
extern void         test_control_return(UINT status);
extern void         _nx_ram_network_driver_1500(struct NX_IP_DRIVER_STRUCT *driver_req);


/* Define the test threads.  */
extern TAHI_TEST_SEQ tahi_01_001[];
extern TAHI_TEST_SEQ tahi_01_002[];
extern TAHI_TEST_SEQ tahi_01_003[];
extern TAHI_TEST_SEQ tahi_01_004[];
extern TAHI_TEST_SEQ tahi_01_005[];
extern TAHI_TEST_SEQ tahi_01_006[];
extern TAHI_TEST_SEQ tahi_01_007[];
extern TAHI_TEST_SEQ tahi_01_008[];
extern TAHI_TEST_SEQ tahi_01_009[];
extern TAHI_TEST_SEQ tahi_01_010[];
extern TAHI_TEST_SEQ tahi_01_011[];
extern TAHI_TEST_SEQ tahi_01_012[];
extern TAHI_TEST_SEQ tahi_01_013[];
extern TAHI_TEST_SEQ tahi_01_014[];
extern TAHI_TEST_SEQ tahi_01_015[];
extern TAHI_TEST_SEQ tahi_01_016[];
extern TAHI_TEST_SEQ tahi_01_017[];
extern TAHI_TEST_SEQ tahi_01_018[];
extern TAHI_TEST_SEQ tahi_01_019[];
extern TAHI_TEST_SEQ tahi_01_020[];
extern TAHI_TEST_SEQ tahi_01_021[];
extern TAHI_TEST_SEQ tahi_01_022[];
extern TAHI_TEST_SEQ tahi_01_023[];
extern TAHI_TEST_SEQ tahi_01_024[];
extern TAHI_TEST_SEQ tahi_01_025[];
extern TAHI_TEST_SEQ tahi_01_026[];
extern TAHI_TEST_SEQ tahi_01_027[];
extern TAHI_TEST_SEQ tahi_01_028[];
extern TAHI_TEST_SEQ tahi_01_029[];
extern TAHI_TEST_SEQ tahi_01_030[];
extern TAHI_TEST_SEQ tahi_01_031[];
extern TAHI_TEST_SEQ tahi_01_032[];
extern TAHI_TEST_SEQ tahi_01_033[];
extern TAHI_TEST_SEQ tahi_01_034[];
extern TAHI_TEST_SEQ tahi_01_035[];
extern TAHI_TEST_SEQ tahi_01_036[];
extern TAHI_TEST_SEQ tahi_01_037[];
extern TAHI_TEST_SEQ tahi_01_038[];
extern TAHI_TEST_SEQ tahi_01_039[];
extern TAHI_TEST_SEQ tahi_01_040[];
extern TAHI_TEST_SEQ tahi_01_041[];
extern TAHI_TEST_SEQ tahi_01_042[];
extern TAHI_TEST_SEQ tahi_01_043[];
extern TAHI_TEST_SEQ tahi_01_044[];
extern TAHI_TEST_SEQ tahi_01_045[];
extern TAHI_TEST_SEQ tahi_01_046[];
extern TAHI_TEST_SEQ tahi_01_047[];
extern TAHI_TEST_SEQ tahi_01_048[];
extern TAHI_TEST_SEQ tahi_01_049[];
extern TAHI_TEST_SEQ tahi_01_050[];
extern TAHI_TEST_SEQ tahi_01_051[];
extern TAHI_TEST_SEQ tahi_01_052[];
extern TAHI_TEST_SEQ tahi_01_053[];
extern TAHI_TEST_SEQ tahi_01_054[];

extern int tahi_01_001_size;
extern int tahi_01_002_size;
extern int tahi_01_003_size;
extern int tahi_01_004_size;
extern int tahi_01_005_size;
extern int tahi_01_006_size;
extern int tahi_01_007_size;
extern int tahi_01_008_size;
extern int tahi_01_009_size;
extern int tahi_01_010_size;
extern int tahi_01_011_size;
extern int tahi_01_012_size;
extern int tahi_01_013_size;
extern int tahi_01_014_size;
extern int tahi_01_015_size;
extern int tahi_01_016_size;
extern int tahi_01_017_size;
extern int tahi_01_018_size;
extern int tahi_01_019_size;
extern int tahi_01_020_size;
extern int tahi_01_021_size;
extern int tahi_01_022_size;
extern int tahi_01_023_size;
extern int tahi_01_024_size;
extern int tahi_01_025_size;
extern int tahi_01_026_size;
extern int tahi_01_027_size;
extern int tahi_01_028_size;
extern int tahi_01_029_size;
extern int tahi_01_030_size;
extern int tahi_01_031_size;
extern int tahi_01_032_size;
extern int tahi_01_033_size;
extern int tahi_01_034_size;
extern int tahi_01_035_size;
extern int tahi_01_036_size;
extern int tahi_01_037_size;
extern int tahi_01_038_size;
extern int tahi_01_039_size;
extern int tahi_01_040_size;
extern int tahi_01_041_size;
extern int tahi_01_042_size;
extern int tahi_01_043_size;
extern int tahi_01_044_size;
extern int tahi_01_045_size;
extern int tahi_01_046_size;
extern int tahi_01_047_size;
extern int tahi_01_048_size;
extern int tahi_01_049_size;
extern int tahi_01_050_size;
extern int tahi_01_051_size;
extern int tahi_01_052_size;
extern int tahi_01_053_size;
extern int tahi_01_054_size;

static TAHI_TEST_SUITE test_suite[54];
static void build_test_suite(void)
{

#if 1
    test_suite[0].test_case = &tahi_01_001[0]; test_suite[0].test_case_size = tahi_01_001_size;
    test_suite[1].test_case = &tahi_01_002[0]; test_suite[1].test_case_size = tahi_01_002_size;
    test_suite[2].test_case = &tahi_01_003[0]; test_suite[2].test_case_size = tahi_01_003_size;
    test_suite[3].test_case = &tahi_01_004[0]; test_suite[3].test_case_size = tahi_01_004_size;
    test_suite[4].test_case = &tahi_01_005[0]; test_suite[4].test_case_size = tahi_01_005_size;   
    test_suite[5].test_case = &tahi_01_006[0]; test_suite[5].test_case_size = tahi_01_006_size;
    test_suite[6].test_case = &tahi_01_007[0]; test_suite[6].test_case_size = tahi_01_007_size;  
    test_suite[7].test_case = &tahi_01_008[0]; test_suite[7].test_case_size = tahi_01_008_size;
    test_suite[8].test_case = &tahi_01_009[0]; test_suite[8].test_case_size = tahi_01_009_size;
    test_suite[9].test_case = &tahi_01_010[0]; test_suite[9].test_case_size = tahi_01_010_size;
    test_suite[10].test_case = &tahi_01_011[0]; test_suite[10].test_case_size = tahi_01_011_size;
    test_suite[11].test_case = &tahi_01_012[0]; test_suite[11].test_case_size = tahi_01_012_size;
#endif
    test_suite[12].test_case = &tahi_01_013[0]; test_suite[12].test_case_size = tahi_01_013_size;
    test_suite[13].test_case = &tahi_01_014[0]; test_suite[13].test_case_size = tahi_01_014_size;
    test_suite[14].test_case = &tahi_01_015[0]; test_suite[14].test_case_size = tahi_01_015_size;
    test_suite[15].test_case = &tahi_01_016[0]; test_suite[15].test_case_size = tahi_01_016_size;
    test_suite[16].test_case = &tahi_01_017[0]; test_suite[16].test_case_size = tahi_01_017_size;
    test_suite[17].test_case = &tahi_01_018[0]; test_suite[17].test_case_size = tahi_01_018_size;
    test_suite[18].test_case = &tahi_01_019[0]; test_suite[18].test_case_size = tahi_01_019_size;
    test_suite[19].test_case = &tahi_01_020[0]; test_suite[19].test_case_size = tahi_01_020_size;
    test_suite[20].test_case = &tahi_01_021[0]; test_suite[20].test_case_size = tahi_01_021_size;
    test_suite[21].test_case = &tahi_01_022[0]; test_suite[21].test_case_size = tahi_01_022_size;
    test_suite[22].test_case = &tahi_01_023[0]; test_suite[22].test_case_size = tahi_01_023_size;
    test_suite[23].test_case = &tahi_01_024[0]; test_suite[23].test_case_size = tahi_01_024_size;
    test_suite[24].test_case = &tahi_01_025[0]; test_suite[24].test_case_size = tahi_01_025_size;
    test_suite[25].test_case = &tahi_01_026[0]; test_suite[25].test_case_size = tahi_01_026_size;
    test_suite[26].test_case = &tahi_01_027[0]; test_suite[26].test_case_size = tahi_01_027_size;
    test_suite[27].test_case = &tahi_01_028[0]; test_suite[27].test_case_size = tahi_01_028_size;
    test_suite[28].test_case = &tahi_01_029[0]; test_suite[28].test_case_size = tahi_01_029_size;   
    test_suite[29].test_case = &tahi_01_030[0]; test_suite[29].test_case_size = tahi_01_030_size;
    test_suite[30].test_case = &tahi_01_031[0]; test_suite[30].test_case_size = tahi_01_031_size;
    test_suite[31].test_case = &tahi_01_032[0]; test_suite[31].test_case_size = tahi_01_032_size;
    test_suite[32].test_case = &tahi_01_033[0]; test_suite[32].test_case_size = tahi_01_033_size;
    test_suite[33].test_case = &tahi_01_034[0]; test_suite[33].test_case_size = tahi_01_034_size;
    test_suite[34].test_case = &tahi_01_035[0]; test_suite[34].test_case_size = tahi_01_035_size;
    test_suite[35].test_case = &tahi_01_036[0]; test_suite[35].test_case_size = tahi_01_036_size;
    test_suite[36].test_case = &tahi_01_037[0]; test_suite[36].test_case_size = tahi_01_037_size;
    test_suite[37].test_case = &tahi_01_038[0]; test_suite[37].test_case_size = tahi_01_038_size;
    test_suite[38].test_case = &tahi_01_039[0]; test_suite[38].test_case_size = tahi_01_039_size;
    test_suite[39].test_case = &tahi_01_040[0]; test_suite[39].test_case_size = tahi_01_040_size;
    test_suite[40].test_case = &tahi_01_041[0]; test_suite[40].test_case_size = tahi_01_041_size;
    test_suite[41].test_case = &tahi_01_042[0]; test_suite[41].test_case_size = tahi_01_042_size;
    test_suite[42].test_case = &tahi_01_043[0]; test_suite[42].test_case_size = tahi_01_043_size;
    test_suite[43].test_case = &tahi_01_044[0]; test_suite[43].test_case_size = tahi_01_044_size;
    test_suite[44].test_case = &tahi_01_045[0]; test_suite[44].test_case_size = tahi_01_045_size;
    test_suite[45].test_case = &tahi_01_046[0]; test_suite[45].test_case_size = tahi_01_046_size;
    test_suite[46].test_case = &tahi_01_047[0]; test_suite[46].test_case_size = tahi_01_047_size;
    test_suite[47].test_case = &tahi_01_048[0]; test_suite[47].test_case_size = tahi_01_048_size;
    test_suite[48].test_case = &tahi_01_049[0]; test_suite[48].test_case_size = tahi_01_049_size;
    test_suite[49].test_case = &tahi_01_050[0]; test_suite[49].test_case_size = tahi_01_050_size;
    test_suite[50].test_case = &tahi_01_051[0]; test_suite[50].test_case_size = tahi_01_051_size;
    test_suite[51].test_case = &tahi_01_052[0]; test_suite[51].test_case_size = tahi_01_052_size;
    test_suite[52].test_case = &tahi_01_053[0]; test_suite[52].test_case_size = tahi_01_053_size;
    test_suite[53].test_case = &tahi_01_054[0]; test_suite[53].test_case_size = tahi_01_054_size;
}


/* Define what the initial system looks like.  */

#ifdef CTEST
VOID test_application_define(void *first_unused_memory)
#else
void           netx_tahi_test_1_define(void *first_unused_memory)
#endif
{
CHAR       *pointer;
UINT       status;
 
    /* Setup the working pointer.  */
    pointer = (CHAR *) first_unused_memory;

    error_counter = 0;
    memset(&test_suite, 0, sizeof(test_suite));

    build_test_suite();

    /* Create the main thread.  */
    tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,  
        pointer, DEMO_STACK_SIZE, 
        4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);

    pointer = pointer + DEMO_STACK_SIZE;

    /* Initialize the NetX system.  */
    nx_system_initialize();

    /* Create a packet pool.  */
    status = nx_packet_pool_create(&pool_0, "NetX Main Packet Pool", 1536, pointer, 1536*16);
    pointer = pointer + 1536*16;

    if(status)
        error_counter++;

    /* Create an IP instance.  */
    status = nx_ip_create(&ip_0, "NetX IP Instance 0", IP_ADDRESS(1,2,3,4), 0xFFFFFF00UL, &pool_0, _nx_ram_network_driver_1500,
        pointer, 2048, 1);
    pointer = pointer + 2048;

    /* Set ipv6 version and address.  */
    ipv6_address_1.nxd_ip_version = NX_IP_VERSION_V6;
    ipv6_address_1.nxd_ip_address.v6[0] = 0xfe800000;
    ipv6_address_1.nxd_ip_address.v6[1] = 0x00000000;
    ipv6_address_1.nxd_ip_address.v6[2] = 0x021122ff;
    ipv6_address_1.nxd_ip_address.v6[3] = 0xfe334456;

    /* Enable IPv6 */
    status = nxd_ipv6_enable(&ip_0);

    /* Enable ARP and supply ARP cache memory for IP Instance 0.  */
    status = nx_arp_enable(&ip_0, (void *) pointer, 1024);
    pointer = pointer + 1024;

    /* Enable ICMP for IP Instance 0 and 1.  */
    status = nxd_icmp_enable(&ip_0);

    /* Check ARP enable status.  */
    if(status)
        error_counter++;


    /* Enable fragment processing for IP Instance 0.  */
    status = nx_ip_fragment_enable(&ip_0);

    /* Check fragment enable status.  */
    if(status)
        error_counter++;

    status += nxd_ipv6_address_set(&ip_0, 0, &ipv6_address_1,64, NX_NULL);

    if(status)
        error_counter++;
}

static void    thread_0_entry(ULONG thread_input)
{
    int                    num_suite;
    int                    i;

    num_suite = sizeof(test_suite) / sizeof(TAHI_TEST_SUITE);
    
    for(i = 0; i < num_suite; i++)
    {
        if(test_suite[i].test_case)
            netx_tahi_run_test_case(&ip_0, test_suite[i].test_case, test_suite[i].test_case_size);
    }

    test_control_return(0xdeadbeef);

    /* Clear the flags. */
    
}

#endif